Hubspot Connector
Hubspot Connector Help
Version 5
ZappySys Logo File Version: v5
Supported Engine: 12

Hubspot Connector - Source Code


<ApiConfig Name="Hubspot"
           Slug="hubspot-connector"
           Id="125a72f8-ba3c-430a-96a6-41b6507dfc43"
           EngineVersion="12"
           Version="5"
           Desc="Hubpost Connector can be used to integrate Hubspot and your data source, e.g. Microsoft SQL Server, Oracle, Excel, Power BI, etc. Get, write, delete Hubspot data in a few clicks!"
           Logo="data:image/png;base64,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"
  >
  
  <VersionHistory>
    <Change Date="2023-07-07">Added upload_file endpoint</Change>
    <Change Date="2022-12-08">Added error retry on status code 429</Change>
    <Change Date="2022-12-08">Added new endpoints for Quotes</Change>
    <Change Date="2022-12-08">Added search endpoints for companies, contacts, deals, tickets, products and lineitems. You can search by filter expressions</Change>
    <Change Date="2022-10-04">Added support for private app authentication (Using static AccessToken)</Change>
    <Change Date="2021-10-19">Added "Get Owners" endpoint.</Change>
    <Change Date="2021-09-30">Initial version</Change>
  </VersionHistory>
  <ServiceUrls>
    <ServiceUrl Name="Hubspot API" Url="https://api.hubapi.com" />
  </ServiceUrls>
  <Auths>
	<Auth Type="HTTP" Name="PrivateApp" Label="Private App (Static Access Token)"
          Desc="Authenticate using static AccessToken (Private App) to access specific account. Follow 3 simple steps. 1) Create an App, 2) select permissions and 3) get Token and use on this UI. For more information on how to obtain AccessToken visit https://developers.hubspot.com/docs/api/private-apps"
          HelpLink="https://developers.hubspot.com/docs/api/private-apps"
    TestEndPoint="get_contact_properties" ConnStr="CredentialType=Token;">
      <Notes>
        <![CDATA[<p>Just follow this link on how to get an PrivateApp Access Token. Once you obtain it, paste it into AccessToken parameter: <a href="https://developers.hubspot.com/docs/api/private-apps">https://developers.hubspot.com/docs/api/private-apps</a>
<p />
]]>
      </Notes>
      <Params>
        <Param Name="Password" Label="AccessToken" Type="Property" Secret="True" Required="True" />

        <Param Name="RetryMode" Value="RetryWhenStatusCodeMatch" Options="None;RetryAny;RetryWhenStatusCodeMatch;" Hidden="True" />
        <Param Name="RetryStatusCodeList" Value="429" Hidden="True" />
        <Param Name="RetryCountMax" Value="5" Hidden="True" />
        <Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />       		
      </Params>
    </Auth>
	
    <Auth Type="OAuth" Name="UserCreds" Label="User Credentials (3-Legged)" Desc="OAuth App must be created in HubSpot website. These settings typically found here https://developers.hubspot.com/docs/api/working-with-oauth."
          HelpLink="https://developers.hubspot.com/docs/api/working-with-oauth"
          ConnStr="Provider=HubSpot;OAuthVersion=OAuth2;ScopeSeparator={space};GrantType=Default;Scope=[$Scope$];ScopeSeparator={space};ContentType=application/x-www-form-urlencoded;ClientId=[$ClientId$];ClientSecret=[$ClientSecret$];"
          TestEndpoint="get_contact_properties">
      <Notes>
        <![CDATA[<p>Just follow this link on how to create an API app: <a href="https://developers.hubspot.com/docs/api/creating-an-app">https://developers.hubspot.com/docs/api/creating-an-app</a>
		On the App Scopes section make sure to select following scopes in order to access all features of this driver. You can choose more or less but keep in mind to select same or less number of scopes on Driver UI (Scopes Property) else it will not authorize the request. If you need File Upload feature then choose files scope.
		
    <div style="background-color:#f5f2c4;border-style: solid;border-width: thin;border-color: #82805e;padding: 5px" >
      Your selected scopes when registering your app <u><i><b>must</b></i></u> match the scopes you enter here on the connector screen. You cannot request less or more scopes for now (it may change in future). 
      <span style="color: #bb0000;"><u><i><b>If they don't match, the connector will not be able to work with your HubSpot account!</b></i></u></span>
    </div>
	
<pre>		
accounting
tickets
files
------------------
crm.lists.read
crm.lists.write
------------------
crm.objects.contacts.read
crm.objects.contacts.write
crm.schemas.contacts.read
------------------
crm.objects.custom.read
crm.objects.custom.write
crm.schemas.custom.read
------------------
crm.objects.companies.read
crm.objects.companies.write
crm.schemas.companies.read
------------------
crm.objects.deals.read
crm.objects.deals.write
crm.schemas.deals.read
------------------
crm.objects.quotes.read
crm.objects.quotes.write
crm.schemas.quotes.read
------------------
crm.objects.line_items.read
crm.objects.line_items.write
crm.schemas.line_items.read

<b>you can add more... but must select same number of scopes in the connection screen too (Scopes Parameter)</b>
</pre>		
<p />
]]>
      </Notes>
      <Params>
        <Param Name="UseCustomApp" Value="True" Required="True" Hidden="False" Desc="Use your own app credentials or inbuilt app provided by ZappySys for ease of use. If you choose UseCustomApp=true then make sure to obtain your own ClientId and Secret using steps provided (Click [Steps to Configure] link found next to Authentication Type dropdown)" />
        <Param Name="ClientId" Label="Client ID" VisibleIf="UseCustomApp" />
        <Param Name="ClientSecret" Label="Client Secret" VisibleIf="UseCustomApp" Secret="True"/>
        <Param Name="Scope"
			   Label="Scope (Must Match with App Scopes)"	
               Required="True"
               Options="account-info.security.read;accounting;actions;automation;business-intelligence;cms.domains.read;cms.domains.write;communication_preferences.read;communication_preferences.read_write;communication_preferences.write;content;conversations.read;conversations.write;crm.export;crm.import;crm.lists.read;crm.lists.write;crm.objects.companies.read;crm.objects.companies.write;crm.objects.contacts.read;crm.objects.contacts.write;crm.objects.custom.read;crm.objects.custom.write;crm.objects.deals.read;crm.objects.deals.write;crm.objects.line_items.read;crm.objects.line_items.write;crm.objects.marketing_events.read;crm.objects.marketing_events.write;crm.objects.owners.read;crm.objects.quotes.read;crm.objects.quotes.write;crm.schemas.companies.read;crm.schemas.contacts.read;crm.schemas.contacts.write;crm.schemas.custom.read;crm.schemas.custom.write;crm.schemas.deals.read;crm.schemas.deals.write;crm.schemas.line_items.read;crm.schemas.quotes.read;e-commerce;files;files.ui_hidden.read;forms;forms-uploaded-files;integration-sync;media_bridge.read;media_bridge.write;oauth;sales-email-read;settings.users.read;settings.users.teams.read;settings.users.teams.write;settings.users.write;tickets;timeline;"
               MultiSelectSeparator=" "
               MultiSelect="True"
               Value="accounting~files~crm.lists.read~crm.lists.write~crm.objects.companies.read~crm.objects.companies.write~crm.objects.contacts.read~crm.objects.contacts.write~crm.objects.custom.read~crm.objects.custom.write~crm.objects.deals.read~crm.objects.deals.write~crm.objects.line_items.read~crm.objects.line_items.write~crm.objects.quotes.read~crm.objects.quotes.write~crm.schemas.companies.read~crm.schemas.contacts.read~crm.schemas.custom.read~crm.schemas.deals.read~crm.schemas.line_items.read~crm.schemas.quotes.read~tickets"
               Desc="Permissions you want to use."
               Example="contacts~tickets"
               HelpLink=""/>
        <Param Name="ReturnUrl" Options="https://zappysys.com/oauth"/>  
        
        <Param Name="RetryMode" Value="RetryWhenStatusCodeMatch" Options="None;RetryAny;RetryWhenStatusCodeMatch;" Hidden="True" />
        <Param Name="RetryStatusCodeList" Value="429" Hidden="True" />
        <Param Name="RetryCountMax" Value="5" Hidden="True" />
        <Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />
      </Params>
    </Auth>
    
    <Auth Type="HTTP" Name="Token" Label="API Key in URL (Deprecated)" 
          Desc="Authenticate using Static API Key instead of userid / password. It can be found at https://app.hubspot.com/api-key/&lt;YOUR_ACCOUNT_ID&gt;>/call-log" 
          HelpLink="https://knowledge.hubspot.com/integrations/how-do-i-get-my-hubspot-api-key"
		  TestEndPoint="get_contact_properties" ConnStr="">
      <Notes>
        <![CDATA[<p>Just follow this link on how to get an API key. Once you obtain it, paste it into ApiKey parameter: <a href="https://knowledge.hubspot.com/integrations/how-do-i-get-my-hubspot-api-key">https://knowledge.hubspot.com/integrations/how-do-i-get-my-hubspot-api-key</a>
<p />
]]>
      </Notes>    
      <Params>
        <Param Name="hapikey" Label="ApiKey" Type="Query" Secret="True" Required="True" />
        <Param Name="RetryMode" Value="RetryWhenStatusCodeMatch" Options="None;RetryAny;RetryWhenStatusCodeMatch;" Hidden="True" />
        <Param Name="RetryStatusCodeList" Value="429" Hidden="True" />
        <Param Name="RetryCountMax" Value="5" Hidden="True" />
        <Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />
      </Params>
    </Auth>        
  </Auths>
  
  <Template>
    <EndPoint Name="Pagination">
      <Params>
        <Param Name="NextUrlAttributeOrExpr"
               Value="$.paging.next.link"
               Type="Property"
          />
      </Params>
    </EndPoint>
    
    <EndPoint Name="PaginationAndSeveralColumns" Template="Pagination">
      <OutputColumns>
        <Column Name="id" Label="Id" DataType="DT_WSTR" />
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />  
      </OutputColumns>
    </EndPoint>
    
    <EndPoint Name="SingleRow" Method="GET">
      <Params>
        <Param Name="Id"
          Required="True"
          IsKey="True"
          />

      </Params>
      <OutputColumns>
        <Column Name="id" Label="Id" DataType="DT_WSTR" Key="True" />
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />
      </OutputColumns>
    </EndPoint>    

    <EndPoint Name="ArchiveItems" Method="POST" DotAsPath="True" BatchSize="100" ContentType="application/json">
      <Params>
        <Param Name="RawOutputDataRowTemplate" Type="Property" Value="{Status:'Archived'}" />
        <Param Name="EnableRawOutputModeSingleRow" Type="Property" Value="True" />                
      </Params>
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>
      <InputColumns>
        <Column Name="id" Key="True" ReadAs="Id" Label="Id" Desc="Id of a company" 
                DataType="DT_WSTR" 
                Length="100"
          />      
      </InputColumns>
      <OutputColumns>
        <Column Name="Status" DataType="DT_WSTR" Length="50" />
      </OutputColumns>
    </EndPoint>      
	
    <EndPoint Name="PaginationForSearch"
	Method="POST" Filter="$.results[*]" ContentType="application/json" MaxRows="10000"
	HelpLink="https://developers.hubspot.com/docs/api/crm/search">
       <Body><![CDATA[{ "limit": 100, "after": "{$after$}", "filters": [$SearchFilters$], "properties" : [ [$Properties$] ] }]]>
      </Body>
      <Params>
	    <Param Name="SearchFilters" 
			Editor="MultiLine"
			Value="[ {&quot;propertyName&quot;: &quot;createdate&quot;, &quot;operator&quot;: &quot;GT&quot;, &quot;value&quot;: &quot;&lt;&lt;today-10year||unix_timestamp_ms,FUN_TO_DATE&gt;&gt;&quot; } ]" />
		  
		<Param Name="PagingMode" Value="ByPostData" Hidden="True" Type="Property"/>
		<Param Name="PagingByUrlCurrentPage" Value="0" Hidden="True" Type="Property"/>
		<Param Name="PagingByUrlAttributeName" Value="{$after$}"  Hidden="True" Type="Property"/>
		<Param Name="PagingIncrementBy" Value="100"  Hidden="True" Type="Property"/>
      </Params>
	  
      <OutputColumns>
        <Column Name="id" Label="Id" DataType="DT_WSTR" />
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />  
      </OutputColumns>
    </EndPoint>	
  </Template>
  
  <EndPoints>

	
    <!-- ==================
        Search Contacts, Company, Deal, Ticket, Product, LineItem, Quote
       ================== -->  
	   
	<EndPoint Name="search_companies" Label="Search Companies" Desc="Search companies using one or more filter conditions. Choose properties to include in the output." Template="PaginationForSearch" 
		Url="/crm/v3/objects/companies/search" > 
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_company_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="&quot;{@value}&quot;" 
               MultiSelectSeparator=","
          />

      </Params>		
      <OutputColumns>         
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_company_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />       
      </OutputColumns>
    </EndPoint>
	
 	<EndPoint Name="search_contacts" Label="Search Contacts" Desc="Search contacts using one or more filter conditions. Choose properties to include in the output." Template="PaginationForSearch" 
		Url="/crm/v3/objects/contacts/search" > 
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_contact_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="&quot;{@value}&quot;" 
               MultiSelectSeparator=","
          />

      </Params>		
      <OutputColumns>         
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_contact_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />       
      </OutputColumns>
    </EndPoint>
	
 	<EndPoint Name="search_tickets" Label="Search Tickets" Desc="Search tickets using one or more filter conditions. Choose properties to include in the output." Template="PaginationForSearch" 
		Url="/crm/v3/objects/tickets/search" > 
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_ticket_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="&quot;{@value}&quot;" 
               MultiSelectSeparator=","
          />

      </Params>		
      <OutputColumns>         
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_ticket_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />       
      </OutputColumns>
    </EndPoint>

    <EndPoint Name="search_deals" Label="Search Deals" Desc="Search deals using one or more filter conditions. Choose properties to include in the output." Template="PaginationForSearch" 
		Url="/crm/v3/objects/deals/search" > 
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_deal_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="&quot;{@value}&quot;" 
               MultiSelectSeparator=","
          />

      </Params>		
      <OutputColumns>         
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_deal_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />       
      </OutputColumns>
    </EndPoint>
	
    <EndPoint Name="search_products" Label="Search Products" Desc="Search products using one or more filter conditions. Choose properties to include in the output." Template="PaginationForSearch" 
		Url="/crm/v3/objects/products/search" > 
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_product_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="&quot;{@value}&quot;" 
               MultiSelectSeparator=","
          />
      </Params>
      <OutputColumns>         
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_product_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />       
      </OutputColumns>
    </EndPoint>
	
    <EndPoint Name="search_lineitems" Label="Search LineItems" Desc="Search LineItems using one or more filter conditions. Choose properties to include in the output." Template="PaginationForSearch" 
		Url="/crm/v3/objects/line_items/search" > 
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_lineitem_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="&quot;{@value}&quot;" 
               MultiSelectSeparator=","
          />

      </Params>		
      <OutputColumns>         
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_lineitem_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />       
      </OutputColumns>
    </EndPoint>

    <EndPoint Name="search_quotes" Label="Search Quotes" Desc="Search Quotes using one or more filter conditions. Choose properties to include in the output." Template="PaginationForSearch" 
		Url="/crm/v3/objects/quotes/search" > 
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_quote_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="&quot;{@value}&quot;" 
               MultiSelectSeparator=","
          />

      </Params>		
      <OutputColumns>         
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_quote_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />       
      </OutputColumns>
    </EndPoint>		
    <!-- ==================
        CONTACTS
       ================== -->  
    <EndPoint Template="PaginationAndSeveralColumns" Name="get_contacts" Label="Get Contacts" Url="/crm/v3/objects/contacts?limit=100&amp;[$Properties$]" Method="GET" Filter="$.results[*]">
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_contact_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}" 
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />
      </Params>
      <OutputColumns>         
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_contact_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </OutputColumns>
    </EndPoint>
	

	
    <!-- ====================
         CONTACT BY ID
         ===================== -->
    <EndPoint Template="SingleRow" Name="get_contact" Label="Get Contact By ID" Url="/crm/v3/objects/contacts/[$Id$]?[$Properties$]"
              >
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_contact_properties"
               OptionsEndPointValueColumn="name"
               MultiSelect="True"
               MultiSelectAllOnBlank="True"
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}"
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />
      </Params>
      <OutputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]"
                DataType="DT_WSTR"
                Length="2000"
                Expand="True"
                DataEndPoint="get_contact_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>
    
    <!-- ====================
         CONTACT PROPERTIES
         ===================== -->
    <EndPoint Template="Pagination" Name="get_contact_properties" Label="Get Contact Properties" CachedTtl="120" Url="/crm/v3/properties/contacts" Method="GET" Filter="$.results[*]">
      <OutputColumns>
        <Column Name="name" Label="Name" DataType="DT_WSTR" Length="300" />
        <Column Name="label" Label="Label" DataType="DT_WSTR" Length="300" />
        <Column Name="type" Label="Type" DataType="DT_WSTR" Length="150" />
        <Column Name="hidden" Label="IsHidden" DataType="DT_BOOL" />
        <Column Name="fieldType" Label="FieldType" DataType="DT_WSTR" Length="150" />
        <Column Name="description" Label="Description" DataType="DT_WSTR" Length="1500" />
      </OutputColumns>
    </EndPoint>    
    
    <!-- ====================
         CREATE CONTACTS
         ===================== -->
    <EndPoint Name="create_contacts" Label="Create Contacts" Url="/crm/v3/objects/contacts/batch/create" Method="POST" Filter="$.results[*]" DotAsPath="True" ContentType="application/json" BatchSize="100">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>
      <InputColumns>        
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_contact_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime,date;DT_BOOL=bool"
          />        
      </InputColumns>      
      <OutputColumns>     
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />     
        
        <!-- DYNAMIC CUSTOM FIELDS  -->      
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_contact_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </OutputColumns>      
    </EndPoint>
    
    <!-- ====================
         UPDATE CONTACTS
         ===================== -->
    <EndPoint Name="update_contacts" Label="Update Contacts" Url="/crm/v3/objects/contacts/batch/update" Method="POST" Filter="$.results[*]" DotAsPath="True" ContentType="application/json" BatchSize="100">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>     
      <InputColumns>         
        <Column Name="id" Key="True" ReadAs="Id" Label="Id" DataType="DT_I8" />
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_contact_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </InputColumns>      
      <OutputColumns>     
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />    
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        
        <!-- DYNAMIC CUSTOM FIELDS  -->      
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_contact_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </OutputColumns>      
    </EndPoint>
    
    <!-- ======================
         ARCHIVE CONTACTS
         =========================== -->
    <EndPoint Template="ArchiveItems" Name="archive_contacts" Label="Archive Contacts" Url="/crm/v3/objects/contacts/batch/archive" >
    </EndPoint>    
    
    <!-- ==================
         DEALS
         =================== -->
    <EndPoint Template="PaginationAndSeveralColumns" Name="get_deals" Label="Get Deals" Url="/crm/v3/objects/deals?limit=100&amp;[$Properties$]" Method="GET" Filter="$.results[*]">
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_deal_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}" 
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />        
      </Params>
      <OutputColumns>
        
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_deal_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_R8=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>
    
    <!-- ====================
         DEAL PROPERTIES
         ===================== -->
    <EndPoint Template="Pagination" Name="get_deal_properties" Label="Get Deal Properties" CachedTtl="120" Url="/crm/v3/properties/deals" Method="GET" Filter="$.results[*]">
      <OutputColumns>
        <Column Name="name" Label="Name" DataType="DT_WSTR" Length="300" />
        <Column Name="label" Label="Label" DataType="DT_WSTR" Length="300" />
        <Column Name="type" Label="Type" DataType="DT_WSTR" Length="150" />
        <Column Name="hidden" Label="IsHidden" DataType="DT_BOOL" />
        <Column Name="fieldType" Label="FieldType" DataType="DT_WSTR" Length="150" />
        <Column Name="description" Label="Description" DataType="DT_WSTR" Length="1500" />
      </OutputColumns>
    </EndPoint>
    
    <!-- ====================
         DEAL BY ID
         ===================== -->
    <EndPoint Template="SingleRow" Name="get_deal" Label="Get Deal By ID" Url="/crm/v3/objects/deals/[$Id$]?[$Properties$]"
              >
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_deal_properties"
               OptionsEndPointValueColumn="name"
               MultiSelect="True"
               MultiSelectAllOnBlank="True"
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}"
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />
      </Params>
      <OutputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]"
                DataType="DT_WSTR"
                Length="2000"
                Expand="True"
                DataEndPoint="get_deal_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>    
    
    <!-- ===================
         CREATE DEALS
         ==================== -->
    <EndPoint Name="create_deals" Label="Create Deals" Url="/crm/v3/objects/deals/batch/create" Method="POST" Filter="$.results[*]" DotAsPath="True" BatchSize="100" ContentType="application/json">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>
      <InputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_deal_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />      
      </InputColumns>
      <OutputColumns>
        <Column Name="id" Label="Id" DataType="DT_WSTR" />
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />  
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_deal_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>
    
    <!-- ======================
         ARCHIVE DEALS
         =========================== -->
    <EndPoint Template="ArchiveItems" Name="archive_deals" Label="Archive Deals" Url="/crm/v3/objects/deals/batch/archive">      
    </EndPoint>     
    
<!-- ====================
         UPDATE DEALS
         ===================== -->
    <EndPoint Name="update_deals" Label="Update Deals" Url="/crm/v3/objects/deals/batch/update" Method="POST" Filter="$.results[*]" DotAsPath="True" ContentType="application/json" BatchSize="100">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>     
      <InputColumns>         
        <Column Name="id" Key="True" ReadAs="Id" Label="Id" DataType="DT_I8" />
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_deal_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </InputColumns>      
      <OutputColumns>     
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />    
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        
        <!-- DYNAMIC CUSTOM FIELDS  -->      
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_deal_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </OutputColumns>      
    </EndPoint>        

    <!-- ====================
         PRODUCTS
         ===================== -->
    <EndPoint Template="PaginationAndSeveralColumns" Name="get_products" Label="Get Products" Url="/crm/v3/objects/products?limit=100&amp;[$Properties$]" Method="GET" Filter="$.results[*]">
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_product_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}" 
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />          
      </Params>
      <OutputColumns>
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_product_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          /> 
      </OutputColumns>
    </EndPoint>      
    
<!-- ====================
         PRODUCT BY ID
         ===================== -->
    <EndPoint Template="SingleRow" Name="get_product" Label="Get Product By ID" Url="/crm/v3/objects/products/[$Id$]?[$Properties$]"
              >
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_product_properties"
               OptionsEndPointValueColumn="name"
               MultiSelect="True"
               MultiSelectAllOnBlank="True"
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}"
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />
      </Params>
      <OutputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]"
                DataType="DT_WSTR"
                Length="2000"
                Expand="True"
                DataEndPoint="get_product_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>        
    
    <!-- ====================
         PRODUCT PROPERTIES
         ===================== -->
    <EndPoint Template="Pagination" Name="get_product_properties" Label="Get Product Properties" CachedTtl="120" Url="/crm/v3/properties/products" Method="GET" Filter="$.results[*]">
      <OutputColumns>
        <Column Name="name" Label="Name" DataType="DT_WSTR" Length="300" />
        <Column Name="label" Label="Label" DataType="DT_WSTR" Length="300" />
        <Column Name="type" Label="Type" DataType="DT_WSTR" Length="150" />
        <Column Name="hidden" Label="IsHidden" DataType="DT_BOOL" />
        <Column Name="fieldType" Label="FieldType" DataType="DT_WSTR" Length="150" />
        <Column Name="description" Label="Description" DataType="DT_WSTR" Length="1500" />
      </OutputColumns>
    </EndPoint>
    
    <!-- ===================
         CREATE PRODUCTS
         ==================== -->
    <EndPoint Name="create_products" Label="Create Products" Url="/crm/v3/objects/products/batch/create" Method="POST" Filter="$.results[*]" DotAsPath="True" BatchSize="100" ContentType="application/json">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>
      <InputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_product_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />      
      </InputColumns>
      <OutputColumns>
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />  
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_product_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>    
    
    <!-- ======================
         ARCHIVE PRODUCTS
         =========================== -->
    <EndPoint Template="ArchiveItems" Name="archive_products" Label="Archive Products" Url="/crm/v3/objects/products/batch/archive">      
    </EndPoint> 

    <!-- ====================
         UPDATE PRODUCTS
         ===================== -->
    <EndPoint Name="update_products" Label="Update Products" Url="/crm/v3/objects/products/batch/update" Method="POST" Filter="$.results[*]" DotAsPath="True" ContentType="application/json" BatchSize="100">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>     
      <InputColumns>         
        <Column Name="id" Key="True" ReadAs="Id" Label="Id" DataType="DT_I8" />
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_product_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </InputColumns>      
      <OutputColumns>     
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />    
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        
        <!-- DYNAMIC CUSTOM FIELDS  -->      
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_product_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </OutputColumns>      
    </EndPoint>    
    
    <!-- ====================
         COMPANIES
         ===================== -->
    <EndPoint Template="PaginationAndSeveralColumns" Name="get_companies" Label="Get Companies" Url="/crm/v3/objects/companies?limit=100&amp;[$Properties$]" Method="GET" Filter="$.results[*]">
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_company_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}" 
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />          
      </Params>
      <OutputColumns>
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_company_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          /> 
      </OutputColumns>
    </EndPoint>

    <!-- ====================
         COMPANY BY ID
         ===================== -->
    <EndPoint Template="SingleRow" Name="get_company" Label="Get Company By ID" Url="/crm/v3/objects/companies/[$Id$]?[$Properties$]"
              >
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_company_properties"
               OptionsEndPointValueColumn="name"
               MultiSelect="True"
               MultiSelectAllOnBlank="True"
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}"
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />
      </Params>
      <OutputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]"
                DataType="DT_WSTR"
                Length="2000"
                Expand="True"
                DataEndPoint="get_company_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>
    
    <!-- ====================
         COMPANY PROPERTIES
         ===================== -->
    <EndPoint Template="Pagination" Name="get_company_properties" Label="Get Company Properties" CachedTtl="120" Url="/crm/v3/properties/companies" Method="GET" Filter="$.results[*]">      
      <OutputColumns>
        <Column Name="name" Label="Name" DataType="DT_WSTR" Length="300" />
        <Column Name="label" Label="Label" DataType="DT_WSTR" Length="300" />
        <Column Name="type" Label="Type" DataType="DT_WSTR" Length="150" />
        <Column Name="hidden" Label="IsHidden" DataType="DT_BOOL" />
        <Column Name="fieldType" Label="FieldType" DataType="DT_WSTR" Length="150" />
        <Column Name="description" Label="Description" DataType="DT_WSTR" Length="1500" />
      </OutputColumns>
    </EndPoint>
    
    <!-- ===================
         CREATE COMPANIES
         ==================== -->
    <EndPoint Name="create_companies" Label="Create Companies" Url="/crm/v3/objects/companies/batch/create" Method="POST" Filter="$.results[*]" DotAsPath="True" BatchSize="100" ContentType="application/json">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>
      <InputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_company_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />      
      </InputColumns>
      <OutputColumns>
        <Column Name="id" Label="Id" DataType="DT_WSTR" />
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />  
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_product_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_WSTR=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint> 
    
    <!-- ======================
         ARCHIVE COMPANIES
         =========================== -->
    <EndPoint Template="ArchiveItems" Name="archive_companies" Label="Archive Companies" Url="/crm/v3/objects/companies/batch/archive">
    </EndPoint>       
    
    <!-- ====================
           UPDATE COMPANIES
         ==================== -->
    <EndPoint Name="update_companies" Label="Update Companies" Url="/crm/v3/objects/companies/batch/update" Method="POST" Filter="$.results[*]" DotAsPath="True" ContentType="application/json" BatchSize="100">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>     
      <InputColumns>         
        <Column Name="id" Key="True" ReadAs="Id" Label="Id" DataType="DT_I8" />
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_company_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </InputColumns>      
      <OutputColumns>     
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />    
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        
        <!-- DYNAMIC CUSTOM FIELDS  -->      
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_company_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </OutputColumns>      
    </EndPoint>    

    <!-- ====================
         LINE ITEMS
         ===================== -->
    <EndPoint Template="PaginationAndSeveralColumns" Name="get_lineitems" Label="Get Line Items" Url="/crm/v3/objects/line_items?limit=100&amp;[$Properties$]" Method="GET" Filter="$.results[*]">
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_lineitem_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}" 
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />          
      </Params>
      <OutputColumns>        
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_lineitem_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          /> 
      </OutputColumns>
    </EndPoint>

    <!-- ====================
         LINE ITEMS BY ID
         ===================== -->
    <EndPoint Template="SingleRow" Name="get_lineitem" Label="Get Line Item By ID" Url="/crm/v3/objects/line_items/[$Id$]?[$Properties$]" 
              >
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_lineitem_properties"
               OptionsEndPointValueColumn="name"
               MultiSelect="True"
               MultiSelectAllOnBlank="True"
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}"
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />
      </Params>
      <OutputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]"
                DataType="DT_WSTR"
                Length="2000"
                Expand="True"
                DataEndPoint="get_lineitem_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>    
    
    
    <!-- ======================
         LINE ITEM PROPERTIES
         ======================= -->
    <EndPoint Name="get_lineitem_properties" Label="Get Line Item Properties" CachedTtl="120" Url="/crm/v3/properties/line_items" Method="GET" Filter="$.results[*]">
      <Params>
        <Param Name="NextUrlAttributeOrExpr"
               Value="$.paging.next.link"
               Type="Property"
          />
      </Params>
      <OutputColumns>
        <Column Name="name" Label="Name" DataType="DT_WSTR" Length="300" />
        <Column Name="label" Label="Label" DataType="DT_WSTR" Length="300" />
        <Column Name="type" Label="Type" DataType="DT_WSTR" Length="150" />
        <Column Name="hidden" Label="IsHidden" DataType="DT_BOOL" />
        <Column Name="fieldType" Label="FieldType" DataType="DT_WSTR" Length="150" />
        <Column Name="description" Label="Description" DataType="DT_WSTR" Length="1500" />
      </OutputColumns>
    </EndPoint>
    
    <!-- ======================
         CREATE LINE ITEMS
         ======================= -->
    <EndPoint Name="create_lineitems" Label="Create Line Items" Url="/crm/v3/objects/line_items/batch/create" Method="POST" Filter="$.results[*]" DotAsPath="True" ContentType="application/json" BatchSize="100" >
      <Params>
        <Param Name="NextUrlAttributeOrExpr"
               Value="$.paging.next.link"
               Type="Property"
          />
      </Params>
      <InputColumns>        
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_lineitem_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          /> 
      </InputColumns>
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>      
      <OutputColumns>
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />  
        <!-- Dynamic -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_lineitem_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          /> 
      </OutputColumns>
    </EndPoint>
    
    <!-- ======================
         ARCHIVE LINE ITEMS
         =========================== -->
    <EndPoint Template="ArchiveItems" Name="archive_lineitems" Label="Archive Line Items" Url="/crm/v3/objects/line_items/batch/archive">      
    </EndPoint>     

    <!-- ====================
           UPDATE LINE ITEMS
         ==================== -->
    <EndPoint Name="update_lineitems" Label="Update Line items" Url="/crm/v3/objects/line_items/batch/update" Method="POST" Filter="$.results[*]" DotAsPath="True" ContentType="application/json" BatchSize="100">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>     
      <InputColumns>         
        <Column Name="id" Key="True" ReadAs="Id" Label="Id" DataType="DT_I8" />
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_lineitem_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </InputColumns>      
      <OutputColumns>     
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />    
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        
        <!-- DYNAMIC CUSTOM FIELDS  -->      
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_lineitem_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </OutputColumns>      
    </EndPoint>      
    
    <!-- ====================
         TICKETS
         ===================== -->
    <EndPoint Template="PaginationAndSeveralColumns" Name="get_tickets" Label="Get Tickets" Url="/crm/v3/objects/tickets?limit=100&amp;[$Properties$]" Method="GET" Filter="$.results[*]">
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_ticket_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}" 
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />          
      </Params>
      <OutputColumns>
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_ticket_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          /> 
      </OutputColumns>
    </EndPoint>

    <!-- ====================
         TICKET BY ID
         ===================== -->
    <EndPoint Template="SingleRow" Name="get_ticket" Label="Get Ticket By ID" Url="/crm/v3/objects/tickets/[$Id$]?[$Properties$]"
              >
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_ticket_properties"
               OptionsEndPointValueColumn="name"
               MultiSelect="True"
               MultiSelectAllOnBlank="True"
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}"
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />
      </Params>
      <OutputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]"
                DataType="DT_WSTR"
                Length="2000"
                Expand="True"
                DataEndPoint="get_ticket_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>
    
    <!-- ====================
         TICKET PROPERTIES
         ===================== -->
    <EndPoint Name="get_ticket_properties" Label="Get Tickets Properties" CachedTtl="120" Url="/crm/v3/properties/tickets" Method="GET" Filter="$.results[*]">
      <Params>
        <Param Name="NextUrlAttributeOrExpr"
               Value="$.paging.next.link"
               Type="Property"
          />
      </Params>
      <OutputColumns>
        <Column Name="name" Label="Name" DataType="DT_WSTR" Length="300" />
        <Column Name="label" Label="Label" DataType="DT_WSTR" Length="300" />
        <Column Name="type" Label="Type" DataType="DT_WSTR" Length="150" />
        <Column Name="hidden" Label="IsHidden" DataType="DT_BOOL" />
        <Column Name="fieldType" Label="FieldType" DataType="DT_WSTR" Length="150" />
        <Column Name="description" Label="Description" DataType="DT_WSTR" Length="1500" />
      </OutputColumns>
    </EndPoint>
    
    <!-- ===================
         CREATE TICKETS
         ==================== -->
    <EndPoint Name="create_tickets" Label="Create Tickets" Url="/crm/v3/objects/tickets/batch/create" Method="POST" Filter="$.results[*]" DotAsPath="True" BatchSize="100" ContentType="application/json">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>
      <InputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_ticket_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />      
      </InputColumns>
      <OutputColumns>
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />  
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_ticket_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>
    
    <!-- ======================
         ARCHIVE TICKETS
         =========================== -->
    <EndPoint Template="ArchiveItems" Name="archive_tickets" Label="Archive Tickets" Url="/crm/v3/objects/tickets/batch/archive">      
    </EndPoint>       
    
    <!-- ====================
           UPDATE TICKETS
         ==================== -->
    <EndPoint Name="update_tickets" Label="Update Tickets" Url="/crm/v3/objects/tickets/batch/update" Method="POST" Filter="$.results[*]" DotAsPath="True" ContentType="application/json" BatchSize="100">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>     
      <InputColumns>         
        <Column Name="id" Key="True" ReadAs="Id" Label="Id" DataType="DT_I8" />
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_ticket_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </InputColumns>      
      <OutputColumns>     
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />    
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        
        <!-- DYNAMIC CUSTOM FIELDS  -->      
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_ticket_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </OutputColumns>      
    </EndPoint>      

 <!-- ====================
         QUOTES
         ===================== -->
    <EndPoint Template="PaginationAndSeveralColumns" Name="get_quotes" Label="Get Quotes" Url="/crm/v3/objects/quotes?limit=100&amp;[$Properties$]" Method="GET" Filter="$.results[*]">
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_quote_properties" 
               OptionsEndPointValueColumn="name" 
               MultiSelect="True" 
               MultiSelectAllOnBlank="True" 
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}" 
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />          
      </Params>
      <OutputColumns>
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_quote_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          /> 
      </OutputColumns>
    </EndPoint>

    <!-- ====================
         QUOTE BY ID
         ===================== -->
    <EndPoint Template="SingleRow" Name="get_quote" Label="Get Ticket By ID" Url="/crm/v3/objects/quotes/[$Id$]?[$Properties$]"
              >
      <Params>
        <Param Name="Properties"
               Type="Placeholder"
               OptionsEndPoint="get_quote_properties"
               OptionsEndPointValueColumn="name"
               MultiSelect="True"
               MultiSelectAllOnBlank="True"
               MultiSelectLimit="5000"
               MultiSelectTemplate="properties={@value}"
               MultiSelectSeparator="&amp;"
               Hidden="True"
          />
      </Params>
      <OutputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]"
                DataType="DT_WSTR"
                Length="2000"
                Expand="True"
                DataEndPoint="get_quote_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>
    
    <!-- ====================
         QUOTE PROPERTIES
         ===================== -->
    <EndPoint Name="get_quote_properties" Label="Get Quotes Properties" CachedTtl="120" Url="/crm/v3/properties/quotes" Method="GET" Filter="$.results[*]">
      <Params>
        <Param Name="NextUrlAttributeOrExpr"
               Value="$.paging.next.link"
               Type="Property"
          />
      </Params>
      <OutputColumns>
        <Column Name="name" Label="Name" DataType="DT_WSTR" Length="300" />
        <Column Name="label" Label="Label" DataType="DT_WSTR" Length="300" />
        <Column Name="type" Label="Type" DataType="DT_WSTR" Length="150" />
        <Column Name="hidden" Label="IsHidden" DataType="DT_BOOL" />
        <Column Name="fieldType" Label="FieldType" DataType="DT_WSTR" Length="150" />
        <Column Name="description" Label="Description" DataType="DT_WSTR" Length="1500" />
      </OutputColumns>
    </EndPoint>
    
    <!-- ===================
         CREATE QUOTES
         ==================== -->
    <EndPoint Name="create_quotes" Label="Create Quotes" Url="/crm/v3/objects/quotes/batch/create" Method="POST" Filter="$.results[*]" DotAsPath="True" BatchSize="100" ContentType="application/json">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>
      <InputColumns>
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_quote_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />      
      </InputColumns>
      <OutputColumns>
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />  
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_quote_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />
      </OutputColumns>
    </EndPoint>
    
    <!-- ======================
         ARCHIVE QUOTES
         =========================== -->
    <EndPoint Template="ArchiveItems" Name="archive_quotes" Label="Archive Quotes" Url="/crm/v3/objects/quotes/batch/archive">      
    </EndPoint>       
    
    <!-- ====================
           UPDATE QUOTES
         ==================== -->
    <EndPoint Name="update_quotes" Label="Update Quotes" Url="/crm/v3/objects/quotes/batch/update" Method="POST" Filter="$.results[*]" DotAsPath="True" ContentType="application/json" BatchSize="100">
      <Body>
        <![CDATA[ { "inputs": {$rows$}  
                  }
        ]]>
      </Body>     
      <InputColumns>         
        <Column Name="id" Key="True" ReadAs="Id" Label="Id" DataType="DT_I8" />
        <!-- DYNAMIC CUSTOM FIELDS  -->
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                KeyIf="id" ReadAs="Id"
                DataEndPoint="get_quote_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </InputColumns>      
      <OutputColumns>     
        <Column Name="id" Label="Id" DataType="DT_I8" />
        <Column Name="createdAt" Label="CreatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="updatedAt" Label="UpdatedAt" DataType="DT_DBTIMESTAMP" />    
        <Column Name="archived" Label="IsArchived" DataType="DT_BOOL" />
        
        <!-- DYNAMIC CUSTOM FIELDS  -->      
        <Column Name="properties.[$parent.name$]" Label="[$parent.name$]" Desc="[$parent.label$]" 
                DataType="DT_WSTR" 
                Length="2000"
                Expand="True"
                DataEndPoint="get_quote_properties"
                ColumnInfoMap="Name=name;DataType=type"
                DataTypeMap="DT_NUMERIC=number;DT_WSTR=string;DT_DBTIMESTAMP=datetime;DT_BOOL=bool"
          />        
      </OutputColumns>      
    </EndPoint>     

    <!-- ====================
         OWNERS
         ===================== -->
    <EndPoint Template="PaginationAndSeveralColumns" Name="get_owners" Label="Get Owners" Url="/crm/v3/owners/[$OwnerId$]" Method="GET" Filter="$.results[*]">
      <Params>        
        <Param Name="OwnerId" />
        <Param Name="ContineOnErrorForStatusCode" Type="Property" Value="True"/>
      </Params>
      <OutputColumns>    
        <Column Name="email" Label="Email" DataType="DT_WSTR" />      
        <Column Name="firstName" Label="FirstName" DataType="DT_WSTR" />      
        <Column Name="lastName" Label="LastName" DataType="DT_WSTR" />      
        <Column Name="userId" Label="UserId" DataType="DT_I8" />             
      </OutputColumns>
    </EndPoint> 
	
    <!-- ====================
         Upload File		  
         ===================== -->
    <EndPoint Name="upload_file" 
	    Method="POST" 
		Filter="$.objects[*]"
		Label="Upload File from Local Disk" 
		Desc="Uploads local file to Hubspot CRM. This API requires files permission for the App (see scopes)"
		HelpLink="https://legacydocs.hubspot.com/docs/methods/files/v3/upload_new_file"
		Url="/filemanager/api/v3/files/upload" 
		IsMultiPart="True"
		>
        <Body>
          <![CDATA[file=@[$SourceFilePath$]
folderPath=[$TargetFolder$]
fileName=[$TargetFileName$]
options={"access": "[$AccessType$]", "overwrite": [$Overwrite$], "duplicateValidationStrategy": "[$DuplicateValidationStrategy$]" , "duplicateValidationScope": "[$DuplicateValidationScope$]" }]]>
        </Body>	
        <Params>
			 <Param Name="SourceFilePath"
				   Label="Source File Path"			 
				   Required="True"
				   Desc="Specify a disk file path"
				   Example="C:\MyParentFolder\Subfolder\file.txt"
				   Value=""
				   Editor="FileOpen"
			  />
			<Param Name="TargetFolder"
				   Label="Target Folder Path"
				   Required="True"
				   Desc="Specify Target folder path. Partially optional field. One of folderPath or folderId must be specified. Path of the folder the file should be uploaded into. Uploading files into the root path “/” is highly discouraged."
				   Example="/SalesDocs"
				   Value="/"
			  />
			<Param Name="TargetFileName"
			       Label="Target File Name (e.g. MyFile.xlsx)"
				   Desc="Specify file name you like to give"               
			  />		  
			<Param Name="AccessType"
				   Required="True"
				   Desc="Specify file access type"
				   Value="PRIVATE" Options="PRIVATE;PUBLIC_NOT_INDEXABLE;PUBLIC_INDEXABLE"
			  />  
			<Param Name="Overwrite"
				   Required="True"
				   Desc="Specify wheather you like to overwrite target file if exists. If true this file with replace any existing files with the name, folder, and type. Note: If this is set to false, and the uploaded file matches the filename of an existing file in the same folder, the file will be uploaded with a number incremented filename (e.g. example_file.txt will become example_file-1.txt)"
				   Value="true" Options="false;true"
			  />	
			<Param Name="DuplicateValidationStrategy"
				   Required="True"
				   Desc="Specify how to handle duplicate target file."
				   Value="NONE" Options="NONE;REJECT;RETURN_EXISTING"
			  />	
			 <Param Name="DuplicateValidationScope"
				   Required="True"
				   Desc="Specify scope of duplicate validation."
				   Value="EXACT_FOLDER" Options="EXACT_FOLDER;ENTIRE_PORTAL"
			  />				  					  
        </Params>
		<OutputColumns>
			<Column Name="id" DataType="DT_I8" Label="Id" />
			<Column Name="portal_id" DataType="DT_I8" Label="PortalId" />
			<Column Name="name" DataType="DT_WSTR" Label="Name" Length="50" />
			<Column Name="size" DataType="DT_I8" Label="Size" />
			<Column Name="height" DataType="DT_I4" Label="Height"  />
			<Column Name="width" DataType="DT_I4" Label="Width"  />
			<Column Name="encoding" DataType="DT_WSTR" Label="Encoding" Length="1020" />
			<Column Name="type" DataType="DT_WSTR" Label="Type" Length="50" />
			<Column Name="extension" DataType="DT_WSTR" Label="Extension" Length="50" />
			<Column Name="cloud_key" DataType="DT_WSTR" Label="CloudKey" Length="500" />
			<Column Name="s3_url" DataType="DT_WSTR" Label="S3Url" Length="500" />
			<Column Name="friendly_url" DataType="DT_WSTR" Label="FriendlyUrl" Length="500" />
			<Column Name="alt_key" DataType="DT_WSTR" Label="AltKey" Length="500" />
			<Column Name="alt_key_hash" DataType="DT_WSTR" Label="AltKeyHash" Length="500" />
			<Column Name="title" DataType="DT_WSTR" Label="Title" Length="50" />
			<Column Name="meta.url_scheme" DataType="DT_WSTR" Label="MetaUrlScheme" Length="50" />
			<Column Name="meta.allows_anonymous_access" DataType="DT_BOOL" Label="MetaAllowsAnonymousAccess" />
			<Column Name="meta.indexable" DataType="DT_BOOL" Label="MetaIndexable" />
			<Column Name="created" DataType="DT_DBTIMESTAMP" Label="Created" Functions="unix_timestamp_ms_to_date" />
			<Column Name="updated" DataType="DT_DBTIMESTAMP" Label="Updated"  Functions="unix_timestamp_ms_to_date" />
			<Column Name="deleted_at" DataType="DT_DBTIMESTAMP" Label="DeletedAt"  Functions="unix_timestamp_ms_to_date" />
			<Column Name="folder_id" DataType="DT_I8" Label="FolderId" />
			<Column Name="hidden" DataType="DT_BOOL" Label="Hidden" />
			<Column Name="cloud_key_hash" DataType="DT_WSTR" Label="CloudKeyHash" Length="500" />
			<Column Name="archived" DataType="DT_BOOL" Label="Archived" />
			<Column Name="created_by" DataType="DT_WSTR" Label="CreatedBy" Length="1020" />
			<Column Name="deleted_by" DataType="DT_WSTR" Label="DeletedBy" Length="1020" />
			<Column Name="replaceable" DataType="DT_BOOL" Label="Replaceable" />
			<Column Name="url" DataType="DT_WSTR" Label="Url" Length="500" />
			<Column Name="alt_url" DataType="DT_WSTR" Label="AltUrl" Length="500" />
			<Column Name="cdn_purge_embargo_time" DataType="DT_WSTR" Label="CdnPurgeEmbargoTime" Length="1020" />
			<Column Name="file_hash" DataType="DT_WSTR" Label="FileHash" Length="1020" />
		</OutputColumns>
    </EndPoint>	
  </EndPoints>
  
  <Tables>
    <Table Name="Contacts" 
           SelectEndPoint="get_contacts" 
           LookupEndPoint="get_contact" 
           InsertEndPoint="create_contacts"
           UpdateEndPoint="update_contacts"
           DeleteEndPoint="archive_contacts"
      />                          
    <Table Name="Companies" 
           SelectEndPoint="get_companies"
           LookupEndPoint="get_company" 
           InsertEndPoint="create_companies"
           UpdateEndPoint="update_companies"
           DeleteEndPoint="archive_companies" 
      />      
    <Table Name="Deals" 
           SelectEndPoint="get_deals" 
           LookupEndPoint="get_deal" 
           InsertEndPoint="create_deals"
           UpdateEndPoint="update_deals"           
           DeleteEndPoint="archive_deals"
      />
    <Table Name="Products" 
           SelectEndPoint="get_products" 
           LookupEndPoint="get_product" 
           InsertEndPoint="create_products"
           UpdateEndPoint="update_products"           
           DeleteEndPoint="archive_products"
      />                
    <Table Name="Tickets" 
           SelectEndPoint="get_tickets" 
           LookupEndPoint="get_ticket" 
           InsertEndPoint="create_tickets"
           UpdateEndPoint="update_tickets"           
           DeleteEndPoint="archive_tickets"
      />    
    <Table Name="LineItems" 
           SelectEndPoint="get_lineitems" 
           LookupEndPoint="get_lineitem" 
           InsertEndPoint="create_lineitems"
           UpdateEndPoint="update_lineitems"           
           DeleteEndPoint="archive_lineitems"
      />       
    <Table Name="Owners" 
           SelectEndPoint="get_owners" 
      />
    <Table Name="Quotes" 
           SelectEndPoint="get_quotes" 
           LookupEndPoint="get_quote" 
           InsertEndPoint="create_quotes"
           UpdateEndPoint="update_quotes"           
           DeleteEndPoint="archive_quotes"
      />	  
  </Tables>
  
  <Examples>

 
    <Example Group="ODBC" Label="Get companies" Desc="Gets companies">
      <Code>
        <![CDATA[SELECT * FROM Companies --Where Id=123]]>
      </Code>
    </Example>

    <Example Group="ODBC" Label="Get contacts" Desc="Gets contacts">
      <Code>
        <![CDATA[SELECT * FROM Contacts --Where Id=123]]>
      </Code>
    </Example>
	
    <Example Group="ODBC" Label="Get contact by Id" Desc="Gets contact by Id">
      <Code>
        <![CDATA[SELECT * FROM Contacts Where Id=51]]>
      </Code>
    </Example>	

    <Example Group="ODBC" Label="Get contact by email (search)" Desc="Gets contacts">
      <Code>
        <![CDATA[SELECT Id
	, IsArchived
	, CreatedAt
	, UpdatedAt
	, email
	, firstname
	, lastname
	, company_size
	--, custom_checkbox
	--, custom_multi_select
	--, custom_number
	--, custom_pickuser
	--, custom_richtext
	--, custom_string
	--, custom_string_multi
FROM search_contacts
With(SearchFilters='[ {"propertyName": "email", "operator": "EQ", "value": "bh@hubspot.com" } ]')]]>
      </Code>
    </Example>

    <Example Group="ODBC" Label="Get deals" Desc="Gets deals">
      <Code>
        <![CDATA[SELECT * FROM Deals --Where Id=123]]>
      </Code>
    </Example>

    <Example Group="ODBC" Label="Get line items" Desc="Gets line items">
      <Code>
        <![CDATA[SELECT * FROM LineItems --Where Id=123]]>
      </Code>
    </Example>
  
    <Example Group="ODBC" Label="Get owners" Desc="Gets owners">
      <Code>
        <![CDATA[SELECT * FROM Owners]]>
      </Code>
    </Example>  

    <Example Group="ODBC" Label="Get products" Desc="Gets products">
      <Code>
        <![CDATA[SELECT * FROM Products --Where Id=123]]>
      </Code>
    </Example>  

    <Example Group="ODBC" Label="Get tickets" Desc="Gets tickets">
      <Code>
        <![CDATA[SELECT * FROM Tickets]]>
      </Code>
    </Example>  

    <Example Group="ODBC" Label="Get quotes" Desc="Gets quotes">
      <Code>
        <![CDATA[SELECT * FROM Quotes]]>
      </Code>
    </Example> 

   <Example Group="ODBC" Label="Generic Request (Company Search API Example)" Desc="This example shows how to invoke generic request when connector file doesnt have specific EndPoint / Table you like to query. This example invokes search endpoint but you can call any valid API endpoint GET/POST etc with this method">
      <Code>
        <![CDATA[SELECT *
FROM generic_request
WITH(
     Url='crm/v3/objects/companies/search'
    ,Filter='$.results[*]'
    ,RequestContentTypeCode='ApplicationJson'
    ,RequestMethod='POST'
    ,RequestData='{
        "filters": [ {"propertyName": "hs_lastmodifieddate", "operator": "GT", "value": "<<yearstart-1y||unix_timestamp_ms,FUN_TO_DATE>>" } ],
        "properties": ["address","city","state"]  
        }'
)]]>
      </Code>
    </Example>		
   <Example Group="ODBC" Label="Upload File (Generic Request Example)" Desc="This example shows how to upload a file using generic request. You might have to add file-manager-permission to your OAuth App else you might get message=This oauth-token (CJT87I6) does not have proper permissions! (requires any of [file-manager-access]). For more information please refer to this link https://developers.hubspot.com/docs/api/files/files">
      <Code>
        <![CDATA[SELECT *
FROM generic_request
WITH(
	  Url='filemanager/api/v3/files/upload'
	, RequestMethod='POST'
	, Filter ='$.objects[*]'
	, Body='file=@c:\temp\dump.png
folderPath=/
fileName=my_dump.png
options={"access": "PRIVATE", "overwrite": true}'
	, IsMultiPart='True'
	, Meta='id:long; name:string; title:string; url: string; type:string; size:long; friendly_url:string; meta.allows_anonymous_access:string; meta.indexable:bool'
)]]>
      </Code>
    </Example>	


    <Example Group="ODBC" Label="Insert into Contacts" Desc="Inserts contacts" >
          <Code><![CDATA[INSERT INTO Contacts(email, firstname, lastname,custom_checkbox, custom_date, custom_number)
VALUES ('john.doe@abc.com', 'John', 'Doe','true','2023-01-01', 100.55)]]>
          </Code>    
    </Example>
	
    <Example Group="ODBC" Label="Update Contacts" Desc="Updates contacts in your account" >
          <Code>
<![CDATA[UPDATE Contacts
SET firstname = 'Brian'
   ,lastname = 'Halligan (Sample Contact)'
   --,custom_number=12.12
   --,custom_date='2023-01-01'
   --,custom_string='My Test<<FUN_NOW>>'
   --,custom_richtext='<p><span style="color: #b5b5b5;">##-Please reply-##</span></p>'
   --,custom_multi_select='Blue;Yellow;Black'
   --,custom_pickuser=45581955
   --,custom_dropdown='BB'
   --,custom_checkbox='true'   
WHERE Id = 51]]>		  
          </Code>
    </Example>
    <Example Group="ODBC" Label="Delete a contact" Desc="Deletes a contact">
      <Code>
        <![CDATA[DELETE FROM Contacts Where Id=1234]]>
      </Code>
    </Example>    
    <Example Group="ODBC" Label="Create multiple records - (BULK read / write from external source)" Desc="This examples shows how to perform bulk update using SOURCE clause. It reads data from external system (in this example MS SQL Server) and sends data to Hubspot using Bulk API">
      <Code>
        <![CDATA[INSERT INTO Contacts 
SOURCE(
  'MSSQL' --ODBC or OLEDB
  ,'Data Source=localhost;Initial Catalog=Test;Integrated Security=true'
  ,' 
    ''bob'' as firstname, ''rock'' as firstname, ''new-email1@abc.com'' as email
    UNION 
    ''sam'' as firstname, ''smith'' as firstname, ''new-email2@abc.com'' as email
)]]>
      </Code>
    </Example>

    <Example Group="ODBC" Label="Delete multiple records - (BULK read / write from external source)" Desc="This examples shows how to perform bulk delete using SOURCE clause. It reads data from external system (in this example MS SQL Server) and sends data to Hubspot using Bulk API">
      <Code>
        <![CDATA[DELETE FROM Contacts 
SOURCE(
  'MSSQL' --ODBC or OLEDB
  ,'Data Source=localhost;Initial Catalog=Test;Integrated Security=true'
  ,'select 104897 as Id 
    UNION 
    select 104898 as Id'
)
        ]]>
      </Code>
    </Example>
    <Example Group="ODBC" Label="Update multiple records - (BULK read / write from external source)" Desc="This examples shows how to perform bulk update using SOURCE clause. It reads data from external system (in this example MS SQL Server) and sends data to Hubspot using Bulk API">
      <Code>
        <![CDATA[UPDATE Contacts 
SOURCE(
  'MSSQL' --ODBC or OLEDB
  ,'Data Source=localhost;Initial Catalog=Test;Integrated Security=true'
  ,'select 104811 as Id, ''new-email1@abc.com'' as email
    UNION 
    select 104812 as Id, ''new-email2@abc.com'' as email
)]]>
      </Code>
    </Example>
  


  </Examples>
</ApiConfig>