# Ortto Source (formerly Autopilot)

<p><a href="https://www.autopilothq.com/" >Ortto</a> (formerly Autopilot) is a popular marketing automation platform that allows you to track and capture new leads, create detailed customer journeys, and boost customer retention.</p>
<p>This guide will help you set up Ortto as a source in RudderStack.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="get-started">Get started</h2><ol>
<li>Go to your <a href="https://app.rudderstack.com/" >RudderStack dashboard</a> and click <strong>Add Source</strong>. From the list of <strong>Event Streams</strong> sources, select <strong>Ortto</strong>.</li>
<li>Assign a name to your source and click <strong>Continue</strong>.</li>
<li>Your Ortto source is now configured. Go to the <strong>Settings</strong> tab of the source and note the <strong>Webhook URL</strong>:</li>
</ol>

<figure class="image--main "  >
    <a 
         href="/docs/images/event-stream-sources/source-webhook-url.webp"
        
        >
        <img src="/docs/images/event-stream-sources/source-webhook-url.webp" 
         alt="Ortto webhook URL"  
         
         
        decoding="async" loading="lazy" class="img-shortcode"/>
    </a>
    
</figure>

<ol start="4">
<li>Log in to your <a href="https://ortto.app/" >Ortto dashboard</a>. From the left sidebar, go to <strong>More</strong> &gt;  <strong>Data sources</strong> &gt; <strong>New data source</strong>:</li>
</ol>

<figure class="image--main "  >
    <a 
         href="/docs/images/event-stream-sources/ortto-webhook-source-1.webp"
        
        >
        <img src="/docs/images/event-stream-sources/ortto-webhook-source-1.webp" 
         alt="Add webhook source in Ortto"  
         
         
        decoding="async" loading="lazy" class="img-shortcode"/>
    </a>
    
</figure>

<ol start="5">
<li>Search for <strong>Webhook</strong> and select <strong>Webhook (advanced)</strong>.</li>
</ol>

<figure class="image--main "  >
    <a 
         href="/docs/images/event-stream-sources/ortto-webhook-source-2.webp"
        
        >
        <img src="/docs/images/event-stream-sources/ortto-webhook-source-2.webp" 
         alt="Add webhook source in Ortto"  
         
         
        decoding="async" loading="lazy" class="img-shortcode"/>
    </a>
    
</figure>

<ol start="6">
<li>Enter the <strong>Webhook name</strong>. Specify the URL obtained in Step 3 in the <strong>Webhook URL</strong> field.</li>
</ol>

<figure class="image--main "  >
    <a 
         href="/docs/images/event-stream-sources/ortto-webhook-source-3.webp"
        
        >
        <img src="/docs/images/event-stream-sources/ortto-webhook-source-3.webp" 
         alt="Add webhook name and URL"  
         
         
        decoding="async" loading="lazy" class="img-shortcode"/>
    </a>
    
</figure>

<ol start="7">
<li>Complete the rest of the configuration as per your requirements and click <strong>Create</strong>.</li>
</ol>

<html lang="en">
<blockquote class="info">
  <div class="tip-quote">
    
    <div class="tip-text">It is recommended to test your webhook using the <strong>Test</strong> button before clicking <strong>Create</strong> to complete the setup.</div>
  </div>
</blockquote>

</html>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="event-transformation">Event transformation</h2><p>RudderStack ingests the events from Ortto as <a href="https://www.rudderstack.com/docs/event-spec/standard-events/track/" ><code>track</code></a> events, after converting them into the appropriate event format.</p>
<p>RudderStack supports ingesting events related to the following <a href="https://help.ortto.com/a-251-configuring-a-webhook#webhook-payload-data" >Ortto standard activities</a>:</p>
<ul>
<li><strong>Email activities</strong></li>
<li><strong>SMS activities</strong></li>
<li><strong>Push activities</strong></li>
<li><strong>Web and user session activities</strong></li>
<li><strong>Audience and tag activities</strong></li>
<li><strong>Playbook activities</strong></li>
<li><strong>Journey activities</strong></li>
<li><strong>Capture widget activities</strong></li>
<li><strong>Talk conversation activities</strong></li>
</ul>
<!-- end-chunk -->
<!-- begin-chunk -->
<h3 id="property-mappings">Property mappings</h3><p>RudderStack maps the following Ortto properties from the event payload to the RudderStack fields:</p>
<table>
  <thead>
      <tr>
          <th>Ortto Property</th>
          <th>RudderStack Property</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>activity.field_id</code></td>
          <td>event</td>
      </tr>
      <tr>
          <td><code>time</code></td>
          <td><code>originalTimestamp</code></td>
      </tr>
      <tr>
          <td><code>id</code></td>
          <td><code>messageId</code></td>
      </tr>
      <tr>
          <td><code>contact.first_name</code></td>
          <td><code>contact.first_name</code></td>
      </tr>
      <tr>
          <td><code>contact.last_name</code></td>
          <td><code>context.traits.lastName</code></td>
      </tr>
      <tr>
          <td><code>contact.email</code></td>
          <td><code>context.traits.email</code></td>
      </tr>
      <tr>
          <td><code>contact.external_id</code></td>
          <td><code>userId</code> / <code>anonymousId</code></td>
      </tr>
      <tr>
          <td><code>contact.country.name</code></td>
          <td><code>context.traits.address.country</code></td>
      </tr>
      <tr>
          <td><code>contact.city.name</code></td>
          <td><code>context.traits.address.city</code></td>
      </tr>
      <tr>
          <td><code>contact.postal</code></td>
          <td><code>context.traits.address.postal</code></td>
      </tr>
      <tr>
          <td><code>contact.phone_number</code></td>
          <td><code>context.traits.phone</code></td>
      </tr>
      <tr>
          <td><code>contact.birthday</code></td>
          <td><code>context.traits.birthday</code></td>
      </tr>
  </tbody>
</table>
<p>A sample input payload ingested by RudderStack:</p>
<div class="rs-code">
  <div class="rs-code__head">json<button class="rs-code__copy" type="button">
      
      Copy
    </button>
  </div>
  <div class="highlight"><pre class="chroma"><code class="language-json" data-lang="json">{
  &#34;activity&#34;: {
    &#34;id&#34;: &#34;00651b946bfef7e80478efee&#34;,
    &#34;field_id&#34;: &#34;act::s-all&#34;,
    &#34;created&#34;: &#34;2023-10-03T04:11:23Z&#34;,
    &#34;attr&#34;: {
      &#34;str::is&#34;: &#34;API&#34;,
      &#34;str::s-ctx&#34;: &#34;Subscribed via API&#34;
    }
  },
  &#34;contact&#34;: {
    &#34;contact_id&#34;: &#34;00651b946baa9be6b2edad00&#34;,
    &#34;email&#34;: &#34;alex@example.com&#34;
  },
  &#34;id&#34;: &#34;00651b946cef87c7af64f4f3&#34;,
  &#34;time&#34;: &#34;2023-10-03T04:11:24.25726779Z&#34;,
  &#34;webhook_id&#34;: &#34;651b8aec8002153e16319fd3&#34;
}</code></pre></div>
</div>
<p>The RudderStack-transformed event payload is shown below:</p>
<div class="rs-code">
  <div class="rs-code__head">json<button class="rs-code__copy" type="button">
      
      Copy
    </button>
  </div>
  <div class="highlight"><pre class="chroma"><code class="language-json" data-lang="json">{
  &#34;anonymousId&#34;: &#34;3ce8d38c-ecad-4941-8226-c802a08a7889&#34;,
  &#34;context&#34;: {
    &#34;externalId&#34;: [{
      &#34;id&#34;: &#34;00651b946baa9be6b2edad00&#34;,
      &#34;type&#34;: &#34;orttoPersonId&#34;
    }],
    &#34;integration&#34;: {
      &#34;name&#34;: &#34;ortto&#34;
    },
    &#34;ip&#34;: &#34;3.139.195.252&#34;,
    &#34;library&#34;: {
      &#34;name&#34;: &#34;unknown&#34;,
      &#34;version&#34;: &#34;unknown&#34;
    },
    &#34;traits&#34;: {
      &#34;email&#34;: &#34;alex@example.com&#34;
    }
  },
  &#34;event&#34;: &#34;Resubscribe globally&#34;,
  &#34;integrations&#34;: {
    &#34;ortto&#34;: false
  },
  &#34;messageId&#34;: &#34;00651b946cef87c7af64f4f3&#34;,
  &#34;originalTimestamp&#34;: &#34;2023-10-03T04:11:24.000Z&#34;,
  &#34;properties&#34;: {
    &#34;activity.attr.str::is&#34;: &#34;API&#34;,
    &#34;activity.attr.str::s-ctx&#34;: &#34;Subscribed via API&#34;,
    &#34;activity.created&#34;: &#34;2023-10-03T04:11:23Z&#34;,
    &#34;activity.id&#34;: &#34;00651b946bfef7e80478efee&#34;,
    &#34;webhook_id&#34;: &#34;651b8aec8002153e16319fd3&#34;
  },
  &#34;receivedAt&#34;: &#34;2023-10-03T13:38:06.762Z&#34;,
  &#34;request_ip&#34;: &#34;3.139.195.252&#34;,
  &#34;rudderId&#34;: &#34;2e69b7d1-1511-4f10-bec9-43652ab8efe0&#34;,
  &#34;sentAt&#34;: &#34;2023-10-17T13:38:10.993Z&#34;,
  &#34;timestamp&#34;: &#34;2023-10-17T13:38:01.768Z&#34;,
  &#34;type&#34;: &#34;track&#34;
}</code></pre></div>
</div>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="faq">FAQ</h2><!-- end-chunk -->
<!-- begin-chunk -->
<h4 id="why-am-i-getting-a-500-error-while-testing-my-webhook-data-source-in-ortto">Why am I getting a 500 error while testing my webhook data source in Ortto?</h4><p>If you&rsquo;re getting a <code>Unexpected status code 500 received</code> while setting up your webhook data source in Ortto, verify if your webhook URL is correctly configured to receive events.</p>

<figure class="image--main "  >
    <a 
         href="/docs/images/event-stream-sources/ortto-source-error.webp"
        
        >
        <img src="/docs/images/event-stream-sources/ortto-source-error.webp" 
         alt="Ortto webhook source error"  
         
         
        decoding="async" loading="lazy" class="img-shortcode"/>
    </a>
    
</figure>

<br />
