# Auto/Mate Source: https://docs.siro.ai/Integrations/Auto_Mate Connect your Auto/Mate DMS to Siro using 3rd party authorization forms coordinated by your Siro CSM. Welcome! This guide explains what you need to do to connect your Auto/Mate DMS to Siro. ## What this integration enables Once connected, Siro syncs the following data from your Auto/Mate DMS in near real-time: * **Deal records** – VIN, stock number, sale date, deal type, and sale status, used to link recordings to F\&I deals * **Repair orders** – RO number, advisor, labor and parts totals, used to link service advisor recordings to open or closed ROs * **Service appointments** – scheduled time, advisor, VIN, and reason for visit, used to surface appointment reminders ahead of a visit * **Customer records** – name, phone, and email, for customer context on recordings * **Employee records** – used to automatically match Auto/Mate employees to their Siro user accounts ## What you need to do ### 1. Send your dealership details to your Siro CSM Before your CSM can prepare any forms, they need the following information for **each rooftop/dealership location** you want to connect. Please provide this for every location: * Dealership Code * Dealership Name * Dealership Address * Dealership City, Province/State * Dealership Postal Code/Zip **Multiple locations?** Please submit a complete set of details for each location. A separate authorization form is required per rooftop, so the more complete your information, the faster your CSM can get the forms ready. ### 2. Receive your authorization form(s) from your Siro CSM Once your CSM has your dealership details, they will send you a **3rd Party Authorization Form** for each location. Review each form to confirm the details are correct before signing. ### 3. Sign and date each form The **Dealer Operator** (owner, GM, or whoever holds signing authority at your store) needs to sign and date each form. * Use Google e-signature to sign and date the document * A separate signed form is required for each rooftop – do not use one signature for multiple locations ### 4. Return all signed forms to your CSM Send the completed, signed forms back to your CSM by email (or however they've requested). Make sure every form is fully signed and dated before returning – incomplete forms will cause delays. ### 5. Your CSM handles the rest Your CSM will submit the forms and set up the integration for each location. Here's what happens behind the scenes: 1. Your CSM submits the forms to the Motive Integrator Activate portal 2. Auto/Mate reviews and activates your dealership's API access 3. Once confirmed, Siro receives a notification and a unique identifier for your store 4. Your CSM will reach out to let you know the integration is live **That's it!** Once you return the signed forms, your CSM takes over. You don't need to contact Auto/Mate directly or take any action inside your DMS. ## What to expect After your CSM submits the forms, activation typically takes a **few business days** on Auto/Mate's end. Your CSM will notify you when data is flowing for each location. If you have multiple rooftops, your CSM will confirm each location separately as they are approved. ## Questions? Contact your Siro Customer Success Manager directly. # Integrating with Siro Source: https://docs.siro.ai/Integrations/Available_Integrations Learn what tools you can connect with Siro to make your conversational data even more valuable. Our platform connects directly with various systems used by successful sales teams, making it easier to incorporate Siro into your existing workflows and enabling powerful new workflows that leverage your conversational data. Click on a tool's name to see how to set up the integration. | **CRM** | **DMS** | | - | - | | [Salesforce](https://docs.siro.ai/Integrations/Salesforce) | [Auto/Mate](https://docs.siro.ai/Integrations/Auto_Mate) | | [Hubspot](https://docs.siro.ai/Integrations/Hubspot) | [CDK Drive](https://docs.siro.ai/Integrations/CDK_Drive) | | [Improveit360](https://docs.siro.ai/Integrations/Improveit360) | [Dealertrack](https://docs.siro.ai/Integrations/Dealertrack) | | [LeadPerfection](https://docs.siro.ai/Integrations/LeadPerfection) | [PBS](https://docs.siro.ai/Integrations/PBS) | | [Microsoft Dynamics](https://docs.siro.ai/Integrations/Microsoft_Dynamics) | [Tekion](https://docs.siro.ai/Integrations/Tekion) | | [Pipedrive](https://docs.siro.ai/Integrations/Pipedrive) | | | [Zoho CRM](https://docs.siro.ai/Integrations/Zoho) | | ### **Other Tools** * [CompanyCam](https://docs.siro.ai/Integrations/CompanyCam) * [Hatch](https://docs.siro.ai/Integrations/Hatch) * [Ingage](https://docs.siro.ai/Integrations/Ingage) * [Leap SalesPro](https://docs.siro.ai/Integrations/Leap_SalesPro) * [Paradigm Vendo](https://docs.siro.ai/Integrations/Paradigm_Vendo) * [SalesRabbit](https://docs.siro.ai/Integrations/SalesRabbit) Hoping to see a particular tool added to this list? Reach out to our team at [support@siro.ai](mailto:support@siro.ai) to let us know what integrations you'd like us to add. # CDK Drive Source: https://docs.siro.ai/Integrations/CDK_Drive Connect CDK Drive to Siro through Siro's Fortellis Marketplace App. Welcome! This guide walks you through connecting CDK Drive to Siro via the Fortellis Marketplace. The setup takes less than 5 minutes. If this is your first time setting up, watch the Fortellis integration demo: [Fortellis app activation demo video](https://cdkglobal.wistia.com/medias/05rn36sghz). ## What this integration enables Once connected, Siro syncs the following data from your CDK Drive DMS: * **Deal records** – used to link recordings to F\&I deals and surface deal type and financial data * **Repair orders** – used to link service advisor recordings to open or closed ROs * **Customer records** – name, phone, and email for customer context on recordings * **Employee records** – used to match CDK employees to their Siro user accounts > **Note:** CDK Drive data syncs **once daily** (not in real-time). Deal and repair order data shown at the time of a recording reflects the most recent daily sync, and will update overnight. Additionally, after completing a recording, reps will be prompted to **manually enter their Deal or RO number** to link the recording – CDK does not support real-time record search. ## Quick checklist Before you start, make sure you have: * Your ConnectCDK login credentials * The dealer locations you want to connect (and any sub-accounts) * Email addresses of team members who need subscription notifications * Watched the [demo video](https://cdkglobal.wistia.com/medias/05rn36sghz) if this is your first time setting up ## Steps **1. Reach out to your Siro CSM to initiate setup**\ Contact your Siro Customer Success Manager to let them know you are ready to connect your CDK Drive integration. Once your CSM has reached back out to you, the steps below will begin. **2. Open the link your CSM sent you to the Siro app in the Fortellis Marketplace**\ Click the link your CSM sent you. It will take you directly to the Siro app listing in the Fortellis Marketplace. **3. Subscribe / activate**\ Click the **Subscribe/Activate** button on the Siro app listing page. **4. ConnectCDK credentials page**\ You will be automatically redirected to the **ConnectCDK Credentials** page (Fortellis' authentication portal for CDK). **5. Log in**\ Enter your ConnectCDK login credentials. **6. Complete the activation workflow**\ You will be guided through the following steps: 1. **Select locations** – Choose the dealer locations you want to connect. If a location has sub-accounts, select the appropriate sub-account for each location. 2. **Agree to terms** – Review and accept the App subscription terms and conditions. 3. **Review subscription and add notification emails** – Review your subscription summary. Add the email addresses of anyone on your team who should receive subscription notifications, **as well as your Siro CSM's email address**. Once you complete these steps, Siro automatically receives an activation notification. Your CSM will take it from here – no further action is needed from you unless they reach out. > **Multiple locations?** Each dealership rooftop requires its own separate Fortellis subscription. If you have multiple locations, repeat the activation workflow for each one. ## What happens next After you activate, your Siro CSM will configure the integration on the Siro platform. ## Questions? Contact your Siro Customer Success Manager directly – they are here to help every step of the way. # CompanyCam Source: https://docs.siro.ai/Integrations/CompanyCam See how you as an account admin can easily connect CompanyCam and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your CompanyCam account to Siro. ## What this integration enables CompanyCam is a field photo documentation tool. The Siro–CompanyCam integration automatically matches jobsite photos taken in CompanyCam to the corresponding Siro recording, and displays them as **photo bookmarks** inline in the recording transcript – so managers and reps can see what was photographed at the exact moment it happened during the conversation. Each bookmark links directly back to the photo in CompanyCam. Photos are matched to recordings based on **timestamp** (the photo was taken during the recording window) and **email address** (the rep's email must match in both systems). > **Note:** This integration does not sync CRM data, push notes or summaries to CompanyCam, or perform any entity extraction from photos. It is a media integration only. ## Before you begin * You need admin access to both your Siro and CompanyCam accounts to set up the integration. * Each rep's email address must be **identical** in both Siro and CompanyCam. If the emails don't match, photos will not appear for that user. Even minor differences (capitalization, different email domain) will prevent matching. ## Steps to connect Any user with admin access to both accounts can set up the integration in just a few steps: 1. Log into your Siro account. 2. In the left sidebar, open **Admin**, then select **Integrations**. 3. Press **New Integration** in the top right corner. 4. Select **CompanyCam** from the list, then press **Connect your account**. 5. Log into your CompanyCam account via the screen that appears to authorize the connection. Once connected, it may take a couple of hours for photos to begin appearing in your recordings. You can also view a video walkthrough of the process [**here**](https://www.loom.com/share/72f12acd73be46a49e5c34bdabf813f3?sid=aa2fe2e0-5764-44cc-97b7-e0830bd6c79e). *** **Need additional assistance?** We're here to help. Simply email your Customer Success Manager at Siro (or contact [support@siro.ai](mailto:support@siro.ai)) and our team will help ensure you get set up properly. # Dealertrack Source: https://docs.siro.ai/Integrations/Dealertrack Authorize Siro in Dealertrack Opentrack as a certified vendor for each required data method. Welcome! This guide walks you through authorizing Siro's access to your Dealertrack DMS via Opentrack. You will add Siro as a certified vendor for each required data method – the process takes around 10 minutes. If you have any questions while navigating Dealertrack, reach out to your Siro Customer Success Manager. Once you have completed the steps below, your CSM will finalize the connection on Siro's end. ## What this integration enables Once connected, Siro syncs the following data from your Dealertrack DMS in near real-time: * **Deal records** – VIN, stock number, sale date, deal type, and sale status, used to link recordings to F\&I deals * **Repair orders** – RO number, advisor, labor and parts totals, used to link service advisor recordings to open or closed ROs * **Service appointments** – scheduled time, advisor, VIN, and reason for visit, used to surface appointment reminders ahead of a visit * **Customer records** – name, phone, and email for customer context on recordings * **Employee records** – used to automatically match Dealertrack employees to their Siro user accounts ## Quick checklist Before you start, make sure you have: * Access to your **Dealertrack DMS** – your user account must have Opentrack access enabled. If you are unsure, contact your DMS administrator before starting. * Your **DMS Enterprise Code** and **Company Code** – find these in the **bottom right-hand corner** of your DMS screen. Your CSM will need these to complete the setup on their end. Enterprise Code and Company Code shown in the bottom right of the Dealertrack DMS screen ## Steps **1. Open Opentrack**\ In the top menu of your Dealertrack DMS, click **More**, then **Data Exchange**, and select **Opentrack**. This opens the **Active Methods** list screen. **2. Create a new vendor**\ From the Active Methods list, click **Add** to start a new entry. The **Vendor Access definition** screen will open – you will choose the **Method**, select **Siro** as the **Vendor**, and set the access dates in the next step. **3. Define the vendor settings** * **Method** – Click the **Method** hyperlink. Select each of the available methods individually, then click **Ok**: * Customers * Deals * Service * **Vendor** – Click the **Vendor** hyperlink. Select **Siro** from the Certified Vendors list, then click **Ok**. * **Access begins** – Click the calendar and select today's date, or the date you would like Siro's access to begin. * **Access ends** – Leave this field **blank** unless your CSM has told you otherwise. Click **Ok** to save. Once all methods have been added to your Siro integration, let your CSM know and share your Enterprise Code and Company Code with them. They will finalize the connection on Siro's end – no further action needed from you. ## What happens next Your Siro CSM will configure the integration on Siro's end once they have your Enterprise Code and Company Code. They will confirm with you once data is flowing. > **Multiple locations?** Each dealership rooftop requires its own separate vendor authorization in Dealertrack Opentrack. If you have multiple locations, repeat the steps above for each one and share the Enterprise Code and Company Code for each location with your CSM. ## Questions? Contact your Siro Customer Success Manager directly – they are here to help every step of the way. # Hatch Source: https://docs.siro.ai/Integrations/Hatch See how you as an account admin can easily connect Hatch and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your Hatch account to Siro. ## What this integration enables Hatch is an outreach automation platform that sends personalized follow-up messages to your prospects after a sales conversation. The Siro–Hatch integration allows Hatch to use insights extracted from your Siro recordings – like a customer's main objection, commitment level, or pricing discussed – to automatically build and trigger tailored follow-up sequences. This is not a bidirectional data sync. Data flows one way: Siro's AI-extracted conversation fields are read by Hatch to personalize outreach. Hatch does not write any data back to Siro. ## Before you begin **A supported CRM must already be connected to Siro** before the Hatch integration can be set up. Hatch uses Siro's CRM connection to identify the right prospects and route follow-up messages correctly. Supported CRMs: * Salesforce * HubSpot * Microsoft Dynamics * i360 * LeadPerfection * ServiceTitan If your organization is not yet connected to one of these CRMs in Siro, please set that up first. Contact your Siro Customer Success Manager if you need help. ## How to get set up You don't need to configure anything directly – setup is handled jointly by your Siro Customer Success Manager and your Hatch CSM. Once you've confirmed your CRM is connected and you're ready to proceed, simply let your Siro CSM know. They will coordinate with Hatch to get your campaigns live, typically within **24 hours**. For reference, Hatch's own setup guide is available here: [Hatch integration documentation](https://docs.usehatchapp.com/integrations/crm-field-management-systems/siro-integration). ## Managing your Hatch campaigns Hatch follow-up campaigns are built and managed by your Hatch CSM – not from within Siro. If you need to make changes to your campaigns or sequences, reach out to your Hatch CSM directly. If you have any questions about how the integration works from Siro's end, contact your Customer Success Manager or email us at [support@siro.ai](mailto:support@siro.ai). # HubSpot Source: https://docs.siro.ai/Integrations/Hubspot See how you as an account admin can easily connect HubSpot and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your HubSpot account to Siro. > ***Note:*** *Please ensure that the email addresses associated with your users' Siro accounts match those of their HubSpot accounts for a seamless integration. Mismatches can prevent proper connection.* ## What this integration enables The Siro–HubSpot integration connects your recorded sales conversations directly to your CRM, so your team can capture, analyze, and act on customer interactions without manual data entry. Once configured, the integration can: 1. **Give Siro access to HubSpot deal and appointment data** so recordings are automatically linked to the right deal records, and reps receive reminders to record ahead of appointments. 2. **Push AI-generated call summaries and recording links** from Siro directly into the associated HubSpot deal as a note – no manual copy-paste required. 3. **Auto-fill HubSpot fields** using Siro's data extraction engine, which pulls structured data from transcripts (e.g., products offered, next steps, quoted price, conversation summary) and writes it back to your CRM. 4. **Match recordings to the right contacts and deals** using Siro's CRM record matching – reps can also manually link recordings to deals from within the Siro app. ## Before you begin Before starting setup, ensure: * You have **HubSpot admin credentials** or sufficient permissions to authorize a private app connection. * The email addresses on your users' Siro accounts **match** those on their HubSpot accounts. If they differ, user-level linking will not work correctly. * The HubSpot user completing the authorization has the correct permissions configured – see the permissions details in Step 2 below. ## Steps to connect **1. Contact your Siro Customer Success Manager**\ We'll need to initiate the integration from our side. Reach out to the team member you've been in touch with and we'll get started. **2. Complete authorization via Merge**\ Our team will provide a secure magic link that routes you to the onboarding flow via Merge, an integration-enabling tool we use. Through Merge, you'll log in with your HubSpot credentials and authorize the connection – then you're done. Merge handles the secure data sync behind the scenes. A few things to keep in mind: * The link should display **"Siro.ai"** as the connecting application. If it shows something different, contact your Customer Success Manager before proceeding. * The magic link **expires after approximately 7 days**. If you don't complete authorization within that window, request a new link. > ***Note:*** *For the integration to work correctly, the HubSpot user who completes the authorization step must have the right permissions configured in HubSpot.* To sync HubSpot data into Siro, the authorizing user needs **read access** to the following HubSpot objects: * Users * Contacts * Companies * Deals * Leads * Engagements * Appointments To allow Siro to write back to HubSpot (conversation summaries, notes, and recording links), additional **write scopes** are also required on the Siro private app in HubSpot. To verify or add these scopes, go to **HubSpot → Settings → Private Apps → siro-merge-integration → Scopes** and confirm the following are enabled: | Scope | Purpose | | - | - | | `crm.objects.companies.write` | Write notes to company records | | `crm.objects.contacts.write` | Write notes to contact records | | `crm.objects.deals.write` | Write notes and link recordings to deals | | `crm.objects.line_items.write` | Write to line item records | If write permissions are missing, Siro will not be able to push summaries or notes back to HubSpot. **3. Establish the integration**\ Once Merge confirms the connection, Siro begins syncing your HubSpot data. It typically takes **one to two hours** for data to begin appearing in both platforms. **4. Data sync begins**\ After syncing is confirmed, Siro imports your HubSpot deal and appointment data, and links each sales conversation to its associated record. Recording summaries and links are written back to the corresponding HubSpot deal automatically. ## A note on HubSpot's data model In Siro, a Company from HubSpot maps to what Siro calls an Account – the top-level entity that groups contacts, deals, and conversation history under a single customer. You'll see your HubSpot Companies reflected under the Accounts section in Siro. If Account data appears sparse after connecting, this is expected behavior – it typically populates as recordings are linked to Companies over time. If you're seeing no Deal data, that's more likely a permissions issue with the authorizing user rather than a data gap. *** **Need additional assistance?** We're here to help. Simply email your Customer Success Manager at Siro (or contact [support@siro.ai](mailto:support@siro.ai)) and our team will help ensure you get set up properly. # Improveit360 Source: https://docs.siro.ai/Integrations/Improveit360 See how you as an account admin can easily connect Improveit360 and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your Improveit360 account to Siro. > ***Note:*** *Please ensure that the email addresses associated with your users' Siro accounts match those of their i360 accounts for a seamless integration. Mismatches can prevent proper connection.* ## What this integration enables The Siro–Improveit360 integration connects recorded sales conversations directly to your CRM, so your team can capture, analyze, and act on customer interactions without manual data entry. Once configured, the integration can: 1. **Sync your i360 appointments to Siro** so recordings are automatically linked to the right engagement records, and reps receive reminders to record ahead of appointments. 2. **Push AI-generated call summaries and notes** from Siro directly into the associated i360 appointment record. 3. **Auto-fill i360 fields** using Siro's data extraction engine, which pulls structured data from transcripts (e.g., products offered, next steps, quoted price, conversation summary) and writes it back to your CRM. ## Before you begin Before starting setup, ensure: * You have **Salesforce admin credentials** for your i360 org. (Improveit360 is built on Salesforce, so a Salesforce admin account is required to authorize the connection.) * The Siro app is **not blocked** in your Salesforce Connected Apps settings. If your org restricts third-party OAuth connections, your admin will need to allow it before setup can be completed. You can check this at: `https://{your-tenant}.my.salesforce-setup.com/lightning/setup/ConnectedAppsUsage/home` * You are ready to complete authorization via the secure link Siro will send you. **Do not attempt to add Siro as a Connected App directly in Salesforce** – this will fail. Setup must go through the link Siro provides. ## Steps to connect **1. Contact your Siro Customer Success Manager**\ We'll need to initiate the integration from our side. Reach out to the team member you've been in touch with and we'll get started. Let us know whether your org is on i360 Classic or i360 Lightning. **2. Complete authorization via Merge**\ Our team will provide a secure magic link that routes you to the onboarding flow via Merge, an integration-enabling tool we use. A few things to keep in mind: * The link should display **"Siro.ai"** as the connecting application (not just "Siro"). If it shows something different, contact your Customer Success Manager before proceeding. * When prompted to log in, use the **Merge OAuth / Salesforce login option** – do not enter your Salesforce credentials directly into a form field. Using the wrong path results in an authentication error, and you'll need a new link to try again. * The magic link **expires after approximately 7 days**. If you don't complete authorization within that window, request a new link from your Customer Success Manager. **3. Establish the integration**\ Once Merge confirms the connection, Siro begins syncing your i360 appointment and account data. It may take a few hours for data to begin appearing in both platforms. **4. Only if needed: Manual rep matching**\ If any email addresses differ between Siro and i360, you can manually match reps to their i360 accounts from the **Users** tab in the Siro web app. Once mapped, Siro will retain the connection for all future syncing. ## Required permissions The Salesforce admin account used to authorize the connection must have sufficient access to: * `i360_Appointment__c` (SalesAppointment) records when using i360 Classic * `i360core__Sales_Appointment__c` (SalesAppointment) records when using i360 Lightning * When using i360 Lightning, recording URLs will automatically land in a custom field: `i360core__Sales_Appointment__c.i360core__Recording_Link__c` * Account / Prospect records * User records For **CRM Autofill** write-back, the user also needs write access to the relevant i360 field objects. Some organizations prefer to set up a dedicated **integration user** rather than authorizing with a personal admin account. This is fully supported, as long as that user has the object access listed above. *** **Need additional assistance?** We're here to help. Simply email your Customer Success Manager at Siro (or contact [support@siro.ai](mailto:support@siro.ai)) and our team will help ensure you get set up properly. # Ingage Source: https://docs.siro.ai/Integrations/Ingage See how you as an account admin can easily connect Ingage and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your Ingage account to Siro. ## What this integration enables Ingage is a presentation platform used by home improvement sales reps to deliver digital slide decks during in-home appointments. The Siro–Ingage integration automatically syncs your Ingage slide activity into Siro recordings as **presentation bookmarks** – giving managers a visual record of exactly which slides were shown and when during each conversation. Bookmarks appear inline in the recording transcript in the Siro web dashboard, timestamped to the moment each slide was opened. > **Note:** This integration does not sync CRM data, create dispositions, or push notes anywhere. It is a media integration only – its purpose is enriching the Siro recording transcript with Ingage presentation context. ## Before you begin * You need admin access to both your Siro and Ingage accounts to set up the integration. * Each rep's email address must be **identical** in both Siro and Ingage. If emails don't match, slides will not appear in that rep's recordings. * **Multi-device setups are supported.** Reps can record on one device (e.g. phone) and present on a separate device (e.g. iPad) – as long as the same email is used on both, slides will link to the recording correctly. ## Steps to connect **1. Get your Ingage API key**\ Log into your Ingage account at [teams.ingage.io](https://teams.ingage.io), then navigate to **Manage → Company → Integrations → Public API Keys** and copy your API key. **2. Connect your Ingage account to Siro** * Go to the Integrations page in the Siro web app at [https://app.siro.ai/#/integrations](https://app.siro.ai/#/integrations) (log in if needed). * Alternatively: in the left sidebar, open **Admin** → **Integrations** → **New Integration** → **Ingage**. * Paste your Ingage API key into the form. Name the integration **"Ingage"**, then click **Create**. Once connected, allow an hour or two for the systems to sync. You may need to close and re-open each application to see the connection take effect. *** **Need additional assistance?** We're here to help. Simply email your Customer Success Manager at Siro (or contact [support@siro.ai](mailto:support@siro.ai)) and our team will help ensure you get set up properly. # LeadPerfection Source: https://docs.siro.ai/Integrations/LeadPerfection See how you as an account admin can easily connect LeadPerfection and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your LeadPerfection account to Siro. To link your accounts so that Siro recording and AI-analysis data appears in LeadPerfection and key deal data (dollar value, outcome, etc.) appears in Siro, follow the process outlined below. > ***Note:*** *You must have admin accounts for both LeadPerfection and Siro to complete this process.* ## What this integration enables Once configured, the Siro–LeadPerfection integration will: 1. **Sync your LeadPerfection appointments to Siro** so recordings are automatically linked to the right engagement records, and reps receive reminders to record ahead of appointments. 2. **Auto-fill LeadPerfection records** using Siro's data extraction engine, which pulls structured fields from transcripts and writes them back to your CRM. 3. **Push AI-generated call summaries and notes** from Siro directly into the associated LeadPerfection engagement record – no manual copy-paste required. ## Before you begin Before starting setup, ensure: * You have **admin access** in both LeadPerfection and Siro. * You can **create users and manage API permissions** in LeadPerfection's Security settings. * You have your **LeadPerfection Client ID** on hand. This is the set of letters/numbers that appears before `leadperfection.com` in the URL when you're logged into your account (e.g. if your URL is `acme.leadperfection.com`, your Client ID is `acme`). * If your organization uses a **custom LeadPerfection domain** (i.e. your login URL is not a standard `*.leadperfection.com` address), let your Siro Customer Success Manager know – there is an additional configuration step on our end. ## Steps to connect ## Step 1: Create the Siro API User in LeadPerfection Siro connects to LeadPerfection using a dedicated API user. You'll need to create this user and grant it the right permissions. **Create the user:** * Log into your LeadPerfection instance. * Go to **Security** > **Employees**. * Click **+** to add a new user. Enter **"Siro"** as the First Name, Last Name, and Username – then press **SAVE**. * Navigate to **Security** > **Passwords**. Find the Siro user you just created and assign it a password. Save this password – you'll need it in Step 2. **Assign API permissions:** * Navigate to **Security** > **User Access**. Use the search box to find the "Siro" user row. * Click the **Pencil and Paper** icon to edit the row. * On the right side under **Function Level Security**, change the dropdown from **LeadDetail** to **API Security**. * Using the checkboxes, enable the following API methods, then save: | API Method | What It Does | | - | - | | `GetSalesApptDetailDateRange` | Allows Siro to fetch appointments within a date range | | `GetSalesApptDispProd` | Allows Siro to determine the organization's timezone | | `AddNotes` | Allows Siro to write call summaries and notes back to LP engagement records | > **Important:** If any of these permissions are missing, the integration will fail to sync appointments or push notes. All three must be enabled for the integration to function correctly. **Enable individual reps:** Each sales rep also needs to be **enabled at the account level in LeadPerfection** in order for Siro to push data on their behalf. If a rep's calls are not appearing in Siro or their notes are not pushing to LeadPerfection, verify that the rep is enabled in LP account settings. ## Step 2: Set Up the Integration in Siro * Within the Siro web app, go to **Admin** > **Integrations** in the left sidebar, then press **New Integration**. * Select **Lead\_Perfection** from the dropdown. * Enter the following credentials: * **Username** – the "Siro" API user you created in Step 1 * **Password** – the password you assigned in Step 1 * **Client ID** – the prefix from your LeadPerfection URL (see Before You Begin above) image.png That's it – you're now all set. Data should begin syncing between the platforms every 10 minutes. You may need to close and re-open each application in order to see the connection take effect. **Having trouble? Get help from Siro:** Contact your Customer Success Manager at Siro or email [support@siro.ai](mailto:support@siro.ai) and our team will help ensure you get set up properly. If you'd like us to complete the setup on your behalf, you can securely share the credentials from Step 1 and we'll take it from there. # Leap SalesPro Source: https://docs.siro.ai/Integrations/Leap_SalesPro See how you as an account admin can easily connect Leap SalesPro and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your Leap SalesPro account to Siro. ## What this integration enables The Siro–Leap SalesPro integration is a **workflow integration**, not a full CRM data sync. Rather than syncing records and pushing notes between two databases, it allows reps to launch Siro recordings directly from within the SalesPro app – keeping their workflow in one place. **What it does today:** * Reps can tap a **Siro button** inside SalesPro to launch a recording without switching apps manually. * After the appointment, reps are returned to SalesPro once the recording is complete. **What it does not currently do:** * Push recording summaries or notes into SalesPro * Sync appointment or deal data between platforms * Trigger appointment reminders * Auto-populate SalesPro estimate fields from Siro transcripts (this is on the roadmap) If you're looking for deeper CRM data sync capabilities, those are available through Siro's other integrations (HubSpot, Salesforce, LeadPerfection, etc.). ## How to set up The Leap SalesPro integration is configured from within the **Leap SalesPro admin dashboard** – not via the Siro dashboard. For step-by-step directions, refer to: 👉 **Leap's setup guide**: [help.leaptodigital.com/s/article/Siro-SalesPro](https://help.leaptodigital.com/s/article/Siro-SalesPro) Once configured, the integration will appear in the Siro app under **Integrations**. The systems should be connected within a few hours. You may need to close and re-open each application for the connection to take effect. ## How it works for reps 1. Rep opens the **Leap SalesPro app** and starts a sales appointment. 2. Rep taps the **Siro button** within SalesPro. 3. SalesPro briefly redirects to the Siro recording screen. 4. Rep conducts the appointment and records with Siro as normal. 5. When finished, Siro completes the recording and the rep is returned to SalesPro. > **Tip:** Keep your phone's screen active during the recording. If the app is backgrounded or the phone locks during the redirect, it can interrupt the recording. If you have any questions, contact your Customer Success Manager or email us at [support@siro.ai](mailto:support@siro.ai). # Microsoft Dynamics Source: https://docs.siro.ai/Integrations/Microsoft_Dynamics See how you as an account admin can easily connect MSFT Dynamics and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your Microsoft Dynamics account to Siro. > ***Note:*** *Please ensure that the email addresses associated with your users' Siro accounts match those of their Microsoft Dynamics accounts. Mismatches can prevent proper connection.* ## What this integration enables The Siro–Microsoft Dynamics 365 integration connects recorded sales conversations directly to your CRM, so your team can capture, analyze, and act on customer interactions without manual data entry. Once configured, the integration can: 1. **Give Siro access to Dynamics 365 appointment and booking data** so recordings are automatically linked to the right engagement records, and reps receive reminders to record ahead of appointments. 2. **Auto-fill Dynamics 365 records** using Siro's data extraction engine, which pulls structured fields from transcripts (e.g., products offered, next steps, conversation summary) and writes them back to your CRM. 3. **Send recording summaries and notes to Dynamics 365** so managers and reps can review call context directly inside their CRM. ## Before you begin Before starting setup, ensure: * You have **Dynamics 365 admin** credentials with permission to authorize third-party OAuth connections. * The email address on your Dynamics 365 admin account **matches** the email address on your Siro account. If they differ, the connection will fail. * You have confirmed with your **Siro Customer Success Manager** that your Dynamics 365 configuration is supported. Dynamics 365 is highly customizable, and your specific setup may require additional configuration steps before the integration is ready to connect. ## Steps to connect **1. Contact your Siro Customer Success Manager**\ We'll need to initiate the integration from our side. Reach out to the team member you've been in touch with and we'll get started. We'll confirm your Dynamics 365 configuration is compatible and prepare the connection on our end. **2. Complete authorization via Merge**\ Our team will provide a secure magic link that routes you to the onboarding flow via Merge, a secure integration-enabling tool we use. Through Merge, you'll log in with your Microsoft Dynamics credentials and authorize the connection – then you're done. Merge handles the secure data sync behind the scenes. A few things to keep in mind during this step: * The link should display **"Siro.ai"** as the connecting application (not just "Siro"). If it shows something different, contact your Customer Success Manager before proceeding. * Authenticate using the **Merge OAuth option**, not by entering your Dynamics credentials directly into a form. Entering credentials directly will result in a failed connection. * The magic link **expires after approximately 7 days**. If you don't complete authorization within that window, request a new link from your Customer Success Manager. **3. Confirm the connection**\ Once authenticated, Merge begins syncing your Dynamics 365 data to Siro. It may take an hour or two for data to begin appearing. Your Siro Customer Success Manager will confirm that users, accounts, and appointment records are syncing correctly before considering setup complete. **4. Data sync begins**\ After syncing is confirmed, Siro imports your Dynamics 365 appointment and deal data. Each sales conversation is linked to its associated record, and recording data – summaries and links to the audio – are written back to your Dynamics 365 records automatically. ## Required permissions For recordings and data sync to function correctly, the authenticating Dynamics 365 user must have **admin-level access** and must be able to authorize Merge's OAuth connection. The integration requires read access to: * BookableResourceBookings (the primary engagement entity in your org) * BookableResources * WorkOrders * Opportunities * Contacts * Accounts * Leads *Please note – any Dynamics 365 field that you want Siro to write data to needs to be writable by the integration user.* *** **Need additional assistance?** We're here to help. Simply email your Customer Success Manager at Siro (or contact [support@siro.ai](mailto:support@siro.ai)) and our team will help ensure you get set up properly. # PBS Source: https://docs.siro.ai/Integrations/PBS Connect your PBS DMS to Siro using dealership authorization forms coordinated by your Siro CSM. Welcome! This guide explains what you need to do to connect your PBS DMS to Siro. ## What this integration enables Once connected, Siro syncs the following data from your PBS DMS in near real-time: * **Deal records** – VIN, stock number, sale date, deal type, and sale status, used to link recordings to F\&I deals * **Repair orders** – RO number, advisor, labor and parts totals, used to link service advisor recordings to open or closed ROs * **Service appointments** – scheduled time, advisor, VIN, and reason for visit, used to surface appointment reminders ahead of a visit * **Customer records** – name, phone, and email for customer context on recordings * **Employee records** – used to automatically match PBS employees to their Siro user accounts ## What you need to do ### 1. Send your dealership details to your Siro CSM Before your CSM can prepare any forms, they need the following information for **each rooftop/dealership location** you want to connect your DMS to Siro. Please provide this for every location in email: * Dealership Code * Dealership Name * Dealership Address * Dealership City, Province/State * Dealership Postal Code/Zip **Multiple locations?** Please submit a complete set of details for each location. A separate authorization form is required per rooftop, so the more complete your information, the faster your CSM can get the forms ready. ### 2. Receive your authorization form(s) from your Siro CSM Once your CSM has your dealership details, they will send you a **PBS DMS Dealership Authorization Form** for each location. Review each form to confirm the details are correct before signing. ### 3. Sign and date each form The **Dealer Operator** (owner, GM, or whoever holds signing authority at your store) needs to sign and date each form. * Use Google e-signature to sign and date the document * A separate signed form is required for each rooftop – signing one form will not apply to all dealerships/rooftops ### 4. Return all signed forms to your CSM Send the completed, signed forms back to your CSM by email. Make sure every form is fully signed and dated before returning – incomplete forms will cause delays. ### 5. Your CSM handles the rest Your CSM will submit the forms and set up the integration for each location. They'll reach out once each connection is live. You don't need to contact PBS directly or take any action inside your DMS. **Disconnecting later?** If you ever need to deactivate the integration, the same Dealership Authorization Form is required – with the **"Cancellation"** box checked. Your CSM will handle this for you. ## Questions? Contact your Siro Customer Success Manager directly. # Paradigm Vendo Source: https://docs.siro.ai/Integrations/Paradigm_Vendo See how you as an account admin can easily connect Paradigm Vendo and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your Paradigm Vendo account to Siro. > ***Note:*** *Please ensure that the email addresses associated with your users' Siro accounts match those of their Paradigm Vendo accounts. Mismatches can prevent recordings from being attributed to the correct rep.* ## What this integration enables The Siro–Paradigm Vendo integration is a **workflow integration**, not a full CRM data sync. It allows reps to launch Siro recordings directly from within the Vendo app – keeping their workflow in one place without switching between apps manually. **What it does today:** * Reps can tap a **Siro recording button** inside Vendo to launch a recording without leaving the app. * After the appointment, reps are returned to Vendo once the recording is complete. **What it does not currently do:** * Push recording summaries or notes into Vendo * Sync appointment or deal data between platforms * Sync outcome dispositions between Vendo and Siro * Trigger appointment reminders If you're looking for deeper CRM data sync capabilities alongside Vendo, those are available through Siro's CRM integrations (such as Improveit360, HubSpot, Salesforce, etc.). ## How it works for reps 1. Rep opens the **Paradigm Vendo app** and begins an appointment. 2. Rep taps the **Siro recording button** within Vendo. 3. Vendo launches the Siro recording screen via a deep-link. 4. Rep conducts and records the appointment in Siro as normal. 5. Recording completes and the rep is returned to Vendo. > **Tip:** Keep your phone's screen active during the transition from Vendo to Siro. If the app is backgrounded or the phone locks during the redirect, it can interrupt the recording. ## Setup There are two ways to set up this integration: ### Through Paradigm Vendo (easier, preferred) 1. As an admin, log into the Paradigm Vendo web app. 2. Navigate to the Vendo Admin Portal, then follow this path: **Manage** > **Offices** > **Integrations** > **Siro.ai** (under Voice Recording Integrations) Paradigm Vendo integration settings 3. Once enabled, all reps will automatically have the Siro recording button available when they start an appointment in Vendo. ### Through Siro If the Vendo admin path isn't available to you, Siro can coordinate setup on your behalf: 1. On your first manager kick-off call, your Siro CSM will confirm which users need to be enabled. All we need is each rep's first name, last name, and email address. 2. Siro will coordinate with the Paradigm Vendo team to get these enabled – typical turnaround is one to two business days. 3. Once emails are confirmed, the Paradigm Vendo team will enable the feature at the user level, activating the recording button within Vendo for those reps. 4. Your Siro CSM will verify everything is working during the first rep onboarding session. *** **Need additional assistance?** We're here to help. Simply email your Customer Success Manager at Siro (or contact [support@siro.ai](mailto:support@siro.ai)) and our team will help ensure you get set up properly. # Pipedrive Source: https://docs.siro.ai/Integrations/Pipedrive See how you as an account admin can easily connect Pipedrive and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your Pipedrive account to Siro. > ***Note:*** *Please ensure that the email addresses associated with your users' Siro accounts match those of their Pipedrive accounts for a seamless integration. Mismatches can prevent proper connection.* ## What this integration enables The Siro–Pipedrive integration connects your recorded sales conversations to your CRM, giving your team more context on every deal without manual data entry. Once configured, the integration can: 1. **Give Siro access to Pipedrive deal and activity data** so recordings are automatically linked to the right deal records, and reps receive reminders to record ahead of appointments. 2. **Push AI-generated call summaries and notes** from Siro directly into the associated Pipedrive deal or activity record. 3. **Match recordings to the right contacts and deals** using Siro's CRM record matching – reps can also manually link recordings to records from within the Siro app. ## Before you begin Before starting setup, ensure: * You have **Pipedrive admin credentials** or sufficient API access to authorize a third-party OAuth connection. * The email addresses on your users' Siro accounts **match** those on their Pipedrive accounts. If they differ, the connection may not attribute recordings correctly. ## Steps to connect **1. Contact your Siro Customer Success Manager**\ We'll need to initiate the integration from our side. Reach out to the team member you've been in touch with and we'll get started. **2. Complete authorization via Merge**\ Our team will provide a secure magic link that routes you to the onboarding flow via Merge, an integration-enabling tool we use. Through Merge, you'll log in with your Pipedrive credentials and authorize the connection – then you're done. Merge handles the secure data sync behind the scenes. A few things to keep in mind: * The link should display **"Siro.ai"** as the connecting application (not just "Siro"). If it shows something different, contact your Customer Success Manager before proceeding. * The magic link **expires after approximately 7 days**. If you don't complete authorization within that window, request a new link from your Customer Success Manager. **3. Establish the integration**\ Once Merge confirms the connection, Siro begins syncing your Pipedrive deal and activity data. It may take an hour or two for data to begin appearing in both platforms. **4. Data sync begins**\ After syncing is confirmed, Siro imports your Pipedrive deal and activity data, and links each sales conversation to its associated record. Recording summaries and notes are written back to the corresponding deal or activity in Pipedrive automatically. ## Required permissions The Pipedrive user authorizing the connection should be an **admin** or have sufficient API access to authorize Merge's OAuth connection. The integration requires access to: * **Deals** – the primary sales record Siro links recordings to * **Persons and Organizations** – used for contact and account matching * **Activities** – appointment and engagement records * **Users** – for mapping Pipedrive reps to Siro users *** **Need additional assistance?** We're here to help. Simply email your Customer Success Manager at Siro (or contact [support@siro.ai](mailto:support@siro.ai)) and our team will help ensure you get set up properly. # SalesRabbit Source: https://docs.siro.ai/Integrations/SalesRabbit See how you as an account admin can easily connect SalesRabbit and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your SalesRabbit account to Siro. ## What this integration enables The Siro–SalesRabbit integration automatically links your Siro recordings to the corresponding SalesRabbit pin after each recording is completed. When a rep finishes a recording, Siro identifies the SalesRabbit pin geographically closest to where the recording ended and writes a link to the recording directly into that pin's notes field – so managers can access the recording without leaving SalesRabbit. **A few important things to know before setting up:** * This integration requires a SalesRabbit account with a subscription tier **higher than Basic**, and an **Admin** or **Owner** role. * Matching is based on **GPS location at the time the recording ends** – not when it uploads. Reps should stop the recording before moving away from the door to ensure the correct pin is matched. * Siro writes a recording link to the pin's notes field. If a rep visits the same address more than once, the most recent recording link will overwrite the previous one. * Each rep must individually link their Siro account to SalesRabbit after setup is complete. **Email matching is case-sensitive** – reps must search using the exact capitalization of their SalesRabbit email address. Searching in all lowercase when the SalesRabbit account begins with a capital letter will return no results. ## Steps to connect **1. Create a custom lead field for Siro within SalesRabbit** * Log into the [SalesRabbit web app](https://app.salesrabbit.com/). * On the left-hand side, click **Settings**, then click **Custom Lead Fields**. * Click **API**. * Copy and paste `siro` into the title field of your new custom field. The title must match exactly – all lowercase. ``` siro ``` **2. Create a recording link connector (still within SalesRabbit)** * On the left-hand side, click **Settings**, then click **Connectors**. * Click **Create New**. * Enter the following fields: * **Connector Type:** App Connect * **Name:** Listen in Siro * **Connected to Lead?:** Required * **Visibility:** Select the entire org (topmost circle on the right-hand side) * **URL:** Copy and paste the link below exactly – do not open it, just copy it. ``` https://app.siro.ai/link/?link=https%3A%2F%2Fapp.siro.ai%2Fanalyze%2F{lead.customFields.siro} ``` * Click **Save**. **3. Create an API token within SalesRabbit** * On the left-hand side, click **Integrations**, then click **API** from the dropdown menu. * Click **API Token**. * Click **Copy** next to the newly created token – you'll use it in the next step. **4. Finalize the connection in Siro** * Go to [https://app.siro.ai/#/integrations](https://app.siro.ai/#/integrations), log in if needed, and press **+ New Legacy Integration**. * Select **Sales Rabbit** as your Integration Provider. * Give the integration a name (e.g., "Sales Rabbit Integration"). * Enter the API token from Step 3 in the **API Token** field. * Click **Create Integration**. Once you've completed these steps, the systems should be integrated within a few hours. You may need to close and re-open each application for the connection to take effect. **5. Each rep links their individual account**\ After setup is complete, each rep must connect their own Siro account to SalesRabbit: * In the Siro app, navigate to account settings and find the SalesRabbit linking option. * Search for your SalesRabbit email address. **Use the exact capitalization your SalesRabbit account uses** – the search is case-sensitive. If your SalesRabbit email starts with a capital letter, search with that capital letter. *** **Need additional assistance?** We're here to help. Simply email your Customer Success Manager at Siro (or contact [support@siro.ai](mailto:support@siro.ai)) and our team will help ensure you get set up properly. # Salesforce Source: https://docs.siro.ai/Integrations/Salesforce Welcome! This guide explains what you need to do to connect your Salesforce account to Siro. ## What this integration enables The Siro–Salesforce integration connects recorded sales conversations directly to your CRM, allowing teams to capture, analyze and act on customer interactions without manual data entry. Once configured, the integration can: 1. **Initiate Siro recordings** from the Salesforce mobile app so reps don’t need to remember to open a separate app. 2. **Give Siro access to Salesforce appointment and opportunity data**. This allows Siro to process recordings and answer questions with more context about the interaction, and allows Siro to send reminders to record ahead of appointments. 3. **Send Siro transcripts to Salesforce** as custom objects for reporting, coaching, or other use-cases. 4. **Auto-fill Salesforce records** so reps don’t need to enter data manually. Siro has a powerful engine to extract structured data fields from transcripts (e.g., lowest quote price, products offered, next steps, conversation summary, etc.). This data can be used to populate fields and create Tasks or Events/Activities associated with records in Salesforce. ## Setup overview Setting up the Siro Salesforce integration consists of **two parts**: 1. **Install the Siro Salesforce Package** Adds Siro components, objects, and permissions into your Salesforce org. 2. **Complete Setup in the Siro Setup Assistant** Connects your Salesforce org securely to Siro and enables data sync. ## Before you begin Before starting installation, ensure: * You have **Salesforce System Administrator** access. * You know which Salesforce org you are installing into (**Production vs. Sandbox**). * You can create or modify users and permission sets. * You have access to your **Siro API token**. * The email address on your Salesforce admin account **matches** the email address on your Siro user account. If these don't match, the connection will fail. ## Installation guide 👉 **Installation & Configuration Guide ([HERE](https://docs.google.com/document/d/1i7Xhsz33LJBaMC_2YQGq8FfyPNC7tOS_4PHZRf7lRuk/edit?tab=t.0))** 👉 **Package Installation URL** ([**HERE**](https://login.salesforce.com/packaging/installPackage.apexp?p0=04tPr000007GCZ3IAO)) Use this guide for: * Package installation * Permission set assignment * Creating and configuring the integration user * Setup Assistant configuration * OAuth and External Client App setup * Lightning component configuration (optional) * Field Service Lightning setup (optional) ## Key steps at a glance 1. Open the Package Installation URL above and install the Siro package into your Salesforce org. 2. Assign the required **Siro permission sets** to all users who will use the integration. Users without the correct permission sets will not see Siro components in Salesforce. 3. Create or designate the **Siro integration user** in Salesforce with the access levels described below. 4. Complete the connection in the **Siro Setup Assistant** using your Siro API token. Refer to the full Installation & Configuration Guide for detailed navigation steps and screenshots. ## Salesforce access requirements For recordings and data sync to function correctly, the integration user must have API access to: * User * Account * Contact * Lead * Opportunity * Event * Task * ServiceAppointment (if using Field Service – see note below) *Please note – any field that you want Siro to write data to needs to be "updatable" in Salesforce.* ## Field Service Lightning If your team uses **Salesforce Field Service**, the Siro integration user will also need a **Field Service license** in order to access `ServiceAppointment` objects. This license must be assigned manually by your Salesforce admin – it cannot be granted through the Siro package alone. Please confirm this is in place before completing setup if Field Service is part of your workflow. *** **Need additional assistance?** We're here to help. Simply email your Customer Success Manager at Siro (or contact [support@siro.ai](mailto:support@siro.ai)) and our team will help ensure you get set up properly. # Tekion Source: https://docs.siro.ai/Integrations/Tekion Approve Siro in Tekion's Integration Hub to connect your Tekion ARC DMS data to Siro. Welcome! This guide walks you through approving Siro's connection to your Tekion DMS via Tekion's Integration Hub. The setup takes less than 5 minutes. If you have any questions while navigating Tekion, reach out to your Siro Customer Success Manager. Once you have approved Siro in the Integration Hub, your CSM will finalize the connection on Siro's end. ## What this integration enables Once connected, Siro syncs the following data from your Tekion ARC DMS in near real-time: * **Deal records** – VIN, stock number, sale date, deal type, and sale status, used to link recordings to F\&I deals * **Repair orders** – RO number, advisor, labor and parts totals, used to link service advisor recordings to open or closed ROs * **Service appointments** – scheduled time, advisor, VIN, and reason for visit, used to surface appointment reminders ahead of a visit * **Customer records** – name, phone, and email for customer context on recordings * **Employee records** – used to automatically match Tekion employees to their Siro user accounts ## Quick checklist Before you start, make sure you have: * Access to your **Tekion ARC** application with admin or operator-level permissions * Confirmed with your CSM which locations need to be connected > **Note:** Your Siro CSM initiates the connection request on their end before you take any action. If you don't yet see a Siro vendor approval prompt in your Tekion system, check with your CSM to confirm they have submitted the activation request. ## Steps **1. Open the Integration Hub**\ Log into your **Tekion ARC** application. In the top navigation, click the **App Grid** menu (the grid icon, usually in the top-right corner of the screen). In the menu that opens: 1. Click the **Apps** tab 2. Navigate to the **APC** section 3. Click the **Integration Hub** tile – this opens the Integration Hub screen **2. Go to the All Integrations tab**\ Inside Integration Hub, you will see two tabs near the top of the screen: * **All Integrations** – every available integration * **My Integrations** – integrations you have already connected or requested Click **All Integrations**. This should display all the available integrations and their details. **3. Find Siro in Tekion**\ Use the **search icon** (magnifying glass icon, near the top of the integrations list) to search for **Siro**. The Siro integration tile will appear in the results. **4. Request the connection**\ Click the **Request Connection** button in the **upper-right corner** of the screen. A pop-up window titled **Accept Data Permissions & T\&C** will appear. This is a two-tab window – you will need to go through both tabs in order. **5. Review data permissions**\ You will land on the **Data Permissions** tab first. This lists the specific data that Siro will access from your DMS (for example deal data and customer records). Read through the permissions. When you are ready, click the **Next** button in the **lower-right corner** of the pop-up to move to the next tab. **6. Accept terms and conditions**\ You are now on the **Terms & Conditions** tab. Review the publisher details and the authorizer details listed here. When you are ready, click **Accept & Connect** in the **lower-right corner** of the pop-up. ## What happens next After you approve the connection, your Siro CSM will finalize the integration configuration on Siro's end and confirm with you once data is flowing. Typical turnaround is within one business day. > **Multiple locations?** Each dealership rooftop requires its own separate approval in Tekion. If you have multiple locations, repeat the steps above for each one. Contact your Siro Customer Success Manager if you have any questions. # Zoho CRM Source: https://docs.siro.ai/Integrations/Zoho See how you as an account admin can easily connect Zoho CRM and Siro to get even more out of both tools. Welcome! This guide explains what you need to do to connect your Zoho CRM account to Siro. > ***Note:*** *Please ensure that the email addresses associated with your users' Siro accounts match those of their Zoho CRM accounts for a seamless integration. Mismatches can prevent proper connection.* ## What this integration enables The Siro–Zoho CRM integration connects your recorded sales conversations directly to your CRM, so your team can capture, analyze, and act on customer interactions without manual data entry. Once configured, the integration can: 1. **Give Siro access to Zoho CRM deal and meeting data** so recordings are automatically linked to the right records, and reps receive reminders to record ahead of appointments. 2. **Push AI-generated call summaries and recording links** from Siro directly into the associated Zoho CRM deal – no manual copy-paste required. 3. **Auto-fill Zoho CRM fields** using Siro's data extraction engine, which pulls structured data from transcripts (e.g., products offered, next steps, quoted price, conversation summary) and writes it back to your CRM. 4. **Match recordings to the right contacts and deals** using Siro's CRM record matching – reps can also manually link recordings to records from within the Siro app. ## Before you begin Before starting setup, ensure: * You have **Zoho CRM admin credentials** or sufficient API access to authorize a third-party OAuth connection. * The email addresses on your users' Siro accounts **match** those on their Zoho CRM accounts. If they differ, user-level linking will not work correctly. * The authorizing user has sufficient access to the following Zoho CRM objects: Meetings, Leads, Contacts, Accounts, Deals, and Users. ## Steps to connect **1. Contact your Siro Customer Success Manager**\ We'll need to initiate the integration from our side. Reach out to the team member you've been in touch with and we'll get started. **2. Complete authorization via Merge**\ Our team will provide a secure magic link that routes you to the onboarding flow via Merge, an integration-enabling tool we use. Through Merge, you'll log in with your Zoho CRM credentials and authorize the connection – then you're done. Merge handles the secure data sync behind the scenes. A few things to keep in mind: * The link should display **"Siro.ai"** as the connecting application. If it shows something different, contact your Customer Success Manager before proceeding. * The magic link **expires after approximately 7 days**. If you don't complete authorization within that window, request a new link from your Customer Success Manager. **3. Establish the integration**\ Once Merge confirms the connection, Siro begins syncing your Zoho CRM data. It typically takes **one to two hours** for data to begin appearing in both platforms. **4. Data sync begins**\ After syncing is confirmed, Siro imports your Zoho CRM deal and meeting data, and links each sales conversation to its associated record. Recording summaries and links are written back to the corresponding deal in Zoho CRM automatically. ## A note on Zoho's data model Zoho CRM uses **Meetings** as the primary engagement and appointment entity. Unlike some other CRMs, Zoho Meetings are not always linked to an Account, Contact, or Deal – they can exist independently. For the best experience with Siro, we recommend ensuring your Zoho Meetings are linked to the appropriate Contact, Lead, or Account records, and that Meetings are associated with a Deal where a sales opportunity exists. When a Meeting has no CRM record link, Siro will do its best to match it using the meeting subject line – but linking accuracy and appointment list visibility will be higher when the association exists in Zoho. *** **Need additional assistance?** We're here to help. Simply email your Customer Success Manager at Siro (or contact [support@siro.ai](mailto:support@siro.ai)) and our team will help ensure you get set up properly. # Create an org-admin API client Source: https://docs.siro.ai/api-references/create-a-client-app post /v1/core/m2m-clients/{organizationId}/org-admin Creates an API client granted the org-admin scope bundle and an org-admin service user, and returns the client id and secret once. The secret cannot be retrieved later. Callers are the same as creating a client with chosen scopes. A parent app can mint this client only when its own grant covers the whole org-admin bundle. Creates a [client app](/authentication) for the organization. The `clientSecret` is returned **once**. Store it immediately — it cannot be retrieved later. To get a new secret, [rotate](/api-references/rotate-a-client-app-secret) the existing client. After create, exchange `clientId` and `clientSecret` at [auth.siro.ai](/api-references/get-a-client-app-access-token). # Create a new team for an org Source: https://docs.siro.ai/api-references/create-a-team post /v1/core/organizations/{orgId}/teams Create a new team for an org # Create an account Source: https://docs.siro.ai/api-references/create-an-account post /v1/integrations/accounts Create an account # Create an engagement user Source: https://docs.siro.ai/api-references/create-an-engagement-user post /v1/integrations/engagement-users Create an engagement user # Create a new integration connection for a given org Source: https://docs.siro.ai/api-references/create-an-integration-connection post /v1/core/integrations/connections Create a new integration connection for a given org # Create a new OAuth access token for a given OAuth app. Source: https://docs.siro.ai/api-references/create-an-oauth-access-token post /v1/core/oauth/apps/{clientId}/access-token This endpoint creates a new OAuth access token at the user scope. Prefer [client apps](/authentication). This Siro OAuth flow still works during the transition and will be retired. # Create a new OAuth application for an organization Source: https://docs.siro.ai/api-references/create-an-oauth-app post /v1/core/oauth/apps This endpoint generates the client_id and client_secret you will need to generate OAuth tokens at a user scope. Prefer [client apps](/authentication). This Siro OAuth flow still works during the transition and will be retired. # Create an opportunity user Source: https://docs.siro.ai/api-references/create-an-opportunity-user post /v1/integrations/opportunity-users Create an opportunity user # Create a new authentication token for an organization. Source: https://docs.siro.ai/api-references/create-an-org-scoped-token post /v1/core/auth/tokens Create a new authentication token for an organization. Can only be used with org-group tokens. Prefer [client apps](/authentication). Org API tokens still work during the transition and will be retired. # Create an organization Source: https://docs.siro.ai/api-references/create-organization post /v1/core/organizations Creates a new organization and associates it with org groups. Org-group admins may call this endpoint. # Create a user Source: https://docs.siro.ai/api-references/create-user post /v1/core/users Creates a user in the given organization. Only admins may call this endpoint. # Hard-delete a single team within a single org Source: https://docs.siro.ai/api-references/delete-a-team delete /v1/core/organizations/{orgId}/teams/{teamId} Hard-delete a single team within a single org # Delete an account Source: https://docs.siro.ai/api-references/delete-an-account delete /v1/integrations/accounts/{id} Delete an accounts # Delete an engagement Source: https://docs.siro.ai/api-references/delete-an-engagement delete /v1/integrations/engagements/{id} Delete an engagement # Delete an engagement user Source: https://docs.siro.ai/api-references/delete-an-engagement-user delete /v1/integrations/engagement-users/{id} Delete an engagement user # Delete a single integration connection within a single org Source: https://docs.siro.ai/api-references/delete-an-integration-connection delete /v1/core/integrations/connections/{id} Delete a single integration connection within a single org # Revoke an OAuth access token for a given OAuth app. Source: https://docs.siro.ai/api-references/delete-an-oauth-access-token delete /v1/core/oauth/apps/{clientId}/access-token/{tokenId} Soft-delete (revoke) an OAuth access token for a given OAuth app. # Delete an OAuth application by id. Source: https://docs.siro.ai/api-references/delete-an-oauth-app delete /v1/core/oauth/apps/{clientId} This endpoint will soft-delete an oauth app and revoke all associated tokens. # Delete an opportunity Source: https://docs.siro.ai/api-references/delete-an-opportunity delete /v1/integrations/opportunities/{id} Delete an opportunity # Delete an opportunity user Source: https://docs.siro.ai/api-references/delete-an-opportunity-user delete /v1/integrations/opportunity-users/{id} Delete an opportunity user # Delete a single authentication token by ID Source: https://docs.siro.ai/api-references/delete-an-org-scoped-token delete /v1/core/auth/tokens/{id} Delete a single authentication token within a given org by ID. Can only be used with org-group tokens. # Remove CRM link from a recording Source: https://docs.siro.ai/api-references/delete-recording-crm-link specs/openapi-internalApi.json delete /v1/core/recordings/{id}/link Removes the link between the recording and the specified CRM object. **Path parameter `id`:** Siro’s internal **recording** id (from recording list/detail APIs). It is not a CRM external id. **Request body:** Same rules as [Create or replace CRM link](./put-recording-crm-link): either **`id`** (Siro internal CRM row id for that entity—not a **Siro User** id) **or** **`externalId` + `integrationConnectionId`**, plus required **`dataType`**. You cannot send both `id` and `externalId`; if you use `externalId`, `integrationConnectionId` is required. See [Create or replace CRM link](./put-recording-crm-link) for examples and validation details. # Get a client app access token Source: https://docs.siro.ai/api-references/get-a-client-app-access-token specs/openapi-auth.json post /oauth2/token OAuth 2.0 `client_credentials` grant. Use the returned `access_token` as `Authorization: Bearer` on the org-wide API (`functions.siro.ai`) and as `x-siro-auth-token` on the user-scoped API (`api.siro.ai`). See [Authentication](/authentication). # Get a single team within a given org Source: https://docs.siro.ai/api-references/get-a-team get /v1/core/organizations/{orgId}/teams/{teamId} Get a single team within a given org # Get accounts Source: https://docs.siro.ai/api-references/get-accounts get /v1/integrations/accounts Get accounts # Get an engagement Source: https://docs.siro.ai/api-references/get-an-engagement get /v1/integrations/engagements/{id} Get an engagement # Get an engagement user Source: https://docs.siro.ai/api-references/get-an-engagement-user get /v1/integrations/engagement-users/{id} Get an engagement user # Get a single integration connection within a single org Source: https://docs.siro.ai/api-references/get-an-integration-connection get /v1/core/integrations/connections/{id} Get a single integration connection within a single org # Get a specific OAuth access token by id. Source: https://docs.siro.ai/api-references/get-an-oauth-access-token get /v1/core/oauth/apps/{clientId}/access-token/{tokenId} This endpoint returns a specific OAuth access token by id. # Get a specific OAuth app Source: https://docs.siro.ai/api-references/get-an-oauth-app get /v1/core/oauth/apps/{clientId} This endpoint returns the OAuth app with the given client ID. # Get an opportunity Source: https://docs.siro.ai/api-references/get-an-opportunity get /v1/integrations/opportunities/{id} Get an opportunity # Get an opportunity user Source: https://docs.siro.ai/api-references/get-an-opportunity-user get /v1/integrations/opportunity-users/{id} Get an opportunity user # Get a single authentication token by ID Source: https://docs.siro.ai/api-references/get-an-org-scoped-token get /v1/core/auth/tokens/{id} Get a single authentication token within a given org by ID # Get audit logs Source: https://docs.siro.ai/api-references/get-audit-logs get /v1/audit/logs # List API clients Source: https://docs.siro.ai/api-references/get-client-apps get /v1/core/m2m-clients/{organizationId} Returns the active API clients for the organization. Secrets are not included. Lists active [client apps](/authentication) for the organization. Secrets are never returned. # Get conversation configurations Source: https://docs.siro.ai/api-references/get-conversation-configurations specs/openapi-internalApi.json get /v1/core/conversation-configurations Retrieves conversation configurations for an organization. Users can only access configurations for their own organization unless they are organization admins. # Get engagement users Source: https://docs.siro.ai/api-references/get-engagement-users get /v1/integrations/engagement-users Get engagement users # Get engagements Source: https://docs.siro.ai/api-references/get-engagements get /v1/integrations/engagements Get engagements # Get evaluated scorecard instance Source: https://docs.siro.ai/api-references/get-evaluated-scorecard-instance specs/openapi-internalApi.json get /v1/core/scorecards/evaluated-instances/{id} Get an evaluated scorecard instance with computed metrics and scores for a specific time period and filter criteria. The user must have access to the organization that owns the scorecard instance. ## What this returns A fully evaluated scorecard for one rep, team, organization, or recording over a date range — the overall score, every section and metric in the configured tree with raw values plus color-coded points, the rubric and weights used to compute them, and (for `filterBy=USER`) AI-generated coaching spotlights with timestamped citations. ## Where the `{id}` comes from The `{id}` in the URL is a **scorecard instance id**, not a recording id. To find it, call [Get scorecard instances](/api-references/get-scorecard-instances) for your organization and conversation type. Most orgs have one active instance per conversation type. If you instead want raw metric values for a single recording (without running a saved scorecard configuration), use [Get scorecard metric values](/api-references/get-scorecard-metrics-values) with `filterBy=RECORDING`. See the [overview](/scorecards-metrics-for-recording) for guidance on when to pick which. ## Picking `filterBy` and `filterByIds` | `filterBy` | What `filterByIds` should be | Typical use | | - | - | - | | `RECORDING` | One or more recording ids | Score a specific call against the saved scorecard | | `USER` | A Siro user id | Rep-level rollup across the date range; also returns `spotlightSummaries` | | `TEAM` | A team id | Team-level rollup | | `ORGANIZATION` | The org id (must match the instance's org) | Org-wide rollup | ## Auth scoping The caller's `x-siro-auth-token` (client app access token or Siro OAuth) must belong to the organization that owns the instance, **or** the caller must be a Siro/org/group admin. Non-admins requesting `filterBy=TEAM` must be a member or coach of that team; non-admins requesting `filterBy=USER` must be that user or coach the user's team. # Get entity extractions for a recording Source: https://docs.siro.ai/api-references/get-extractions get /v1/core/entities/extractions/{recordingId} Get entity extractions for a recording # Get followups Source: https://docs.siro.ai/api-references/get-followups specs/openapi-internalApi.json get /v1/core/followups Retrieve followups with filtering and pagination support. Admins and coaches can access followups for their organization/teams, while regular users can only see their own followups. Returns a paginated list of AI-generated followups tied to recordings. Each followup includes the source recording, rep/team context, score, status, and optional CRM customer data. ## Access Admins and coaches can list followups for their organization and teams. Regular users only see their own followups. ## Pagination Use `limit` (default 25, max 100) and the `cursor` from the previous response to walk pages. The cursor is opaque — pass it back unchanged. ## Common filters | Parameter | Use | | - | - | | `statuses` | `TO_DO`, `IN_PROGRESS`, or `COMPLETE` | | `minimumScore` | Score floor (1–5, default 3) | | `starred` | Starred followups only | | `createdAfter` / `createdBefore` | ISO 8601 UTC window | | `includeHistory` | Include status changes and notes | | `excludeCrmCustomer` | Omit CRM customer block | ## Related endpoints Followups can also be embedded on a single recording via `showFollowups=true` on [Get recording details](/api-references/get-recording-details). # Get details about your current auth token Source: https://docs.siro.ai/api-references/get-identity get /v1/core/auth/caller-identity Returns metadata about the auth token used to make this API call # Get all integration connections for a single org Source: https://docs.siro.ai/api-references/get-integration-connections get /v1/core/integrations/connections Returns all integration connections for an org, optionally filtered by platform # Get mobile events for an org Source: https://docs.siro.ai/api-references/get-mobile-events get /v1/core/mobile-events Get mobile events for an organization with optional filtering # Get mobile event by ID Source: https://docs.siro.ai/api-references/get-mobile-events-id get /v1/core/mobile-events/{id} Get a specific mobile event by its ID # Get all OAuth access tokens for a given OAuth app. Source: https://docs.siro.ai/api-references/get-oauth-access-tokens get /v1/core/oauth/apps/{clientId}/access-token This endpoint returns all OAuth access tokens for a given OAuth app. # Get all OAuth apps for an organization Source: https://docs.siro.ai/api-references/get-oauth-apps get /v1/core/oauth/apps This endpoint returns all registered OAuth apps for a given owner meeting the specified filters.Results can be returned using either a cursor-based pagination or a page-based pagination.If both a cursor and a page are provided, the cursor will be used.By default, results are sorted by dateCreated in descending order. # Get opportunities Source: https://docs.siro.ai/api-references/get-opportunities get /v1/integrations/opportunities Get opportunities # Get opportunity users Source: https://docs.siro.ai/api-references/get-opportunity-users get /v1/integrations/opportunity-users Get opportunity users # List all tokens for a given org. Source: https://docs.siro.ai/api-references/get-org-scoped-tokens get /v1/core/auth/tokens List all tokens for a given org. Can be used with org-scoped or org-group token. If org-group token, must pass selector. # Get an organization by ID Source: https://docs.siro.ai/api-references/get-organization get /v1/core/organizations/{id} Returns the organization for the given ID. Org admins of the organization, or members of the organization may call this endpoint. # Get organizations Source: https://docs.siro.ai/api-references/get-organizations get /v1/core/organizations # Get recording Source: https://docs.siro.ai/api-references/get-recording specs/openapi-externalApi.json get /v1/core/recordings/{id} Get a recording by id Returns a single recording by its Siro internal id. By default the response contains the recording's core fields; opt into the enrichment blocks below to also pull CRM links, the AI summary, entity extractions, and followups in the same request. ## Deleted recordings Every recording carries two core fields (always present, no opt-in required) that tell you whether it has been deleted in Siro: | Field | Shape | Description | | - | - | - | | `deleted` | `boolean` | `true` if the recording has been deleted, `false` otherwise | | `deletedAt` | `string \| null` | ISO 8601 timestamp of when it was deleted, or `null` if it has not been deleted | A deleted recording is **still returned** by this endpoint (it does not 404) — it comes back with `deleted: true`. Treat that as a signal to hide or remove the recording on your side; the Siro app already hides these from its Recordings view. ## Enriching the response The org-scoped recordings endpoints can optionally hydrate extra blocks of data, each behind an opt-in query flag: | Flag | Adds | Use it to | | - | - | - | | `showCrmLinks` | `crm` — external IDs for the CRM records linked to the recording | Map a recording back to the appointment / account / contact in your CRM | | `showSummary` | `summary` — the recording's AI summary sections | Pull conversation summaries into your pipeline (e.g. post-call personalization) | | `showEntityExtractions` | `entityExtractions` — extracted values and their CRM field mappings | Write extracted fields back to your CRM | | `showFollowups` | `followups` — AI-generated followups for the recording | Surface followup scores and (on the single-recording endpoint) full followup detail | They are **off by default** and additive — omit them and the response is unchanged. Pass `=true` to enable. ### `crm` — CRM link IDs When `showCrmLinks=true`, `crm` contains the external IDs of the CRM records the recording is linked to. Every linked object is returned as a pair: * **`id`** — Siro's internal ID for the object * **`externalId`** — that object's ID **in your CRM** (use this to join) | Field | Shape | CRM object | | - | - | - | | `integrationConnectionId` | `string` | The Siro integration connection the links came from | | `users` | array of `{id, externalId}` | CRM user(s) who own the recording (the rep) | | `engagement` | `{id, externalId}` | The CRM engagement / **appointment** | | `opportunity` | `{id, externalId}` | The opportunity | | `contacts` | array of `{id, externalId}` | Contact(s) | | `account` | `{id, externalId}` | Account | | `lead` | `{id, externalId}` | Lead | This is the same shape emitted by the `integrations.recordingProcessed` webhook, so pull-based polling and push-based webhooks give you identical CRM references. `crm` is `null` when the recording has no confirmed CRM link yet. Because links can be established after a recording is created, poll the [list endpoint](/api-references/get-recordings) with the `updatedAt` filters to pick up recordings as they become linked. `engagement` (the appointment) is only populated when the recording is linked to a **CRM-sourced** engagement. Recordings linked only to a Siro-side calendar event return `engagement: null` while still returning `account` / `contact`. To map on the appointment ID, ensure your appointments sync to Siro as CRM engagements. Any field with no linked record is `null`. ### `summary` When `showSummary=true`, `summary` is the recording's AI summary as an ordered array of sections: | Field | Description | | - | - | | `id` | Summary section ID | | `name` | Section title (the prompt header) | | `content` | Generated summary text | Returns `[]` if the recording has no summary yet. ### `entityExtractions` When `showEntityExtractions=true`, `entityExtractions` is a flat list of the values extracted from the conversation, including the CRM field each maps to: | Field | Description | | - | - | | `name` | The extracted field name | | `value` | The extracted value | | `mappings` | CRM target(s): `[{ crmModelName, crmFieldName }]` — which object and field to write `value` to | Only successfully completed extractions are included; in-progress or failed extractions are omitted. Returns `[]` if there are none. Use `mappings` to write each `value` to the corresponding field on the CRM record from the `crm` block. ### `followups` When `showFollowups=true`, `followups` is an array of AI-generated followups tied to the recording. The payload differs by endpoint: **List** (`GET /v1/core/recordings`) returns slim summaries: | Field | Description | | - | - | | `id` | Followup ID | | `score` | Followup score (1–5) | Use [Get recording](/api-references/get-recording) with `showFollowups=true` when you need the full followup payload for a specific recording. **Single recording** (`GET /v1/core/recordings/{id}`) returns the full followup payload, including: | Field | Description | | - | - | | `followupId` | Followup ID | | `score` | Followup score (1–5) | | `status` | `TO_DO`, `IN_PROGRESS`, or `COMPLETE` | | `followupAction` | Suggested action text | | `context` | Array of `{ header, value }` context items | | `thinking` | Score breakdown / reasoning | ### Example ```bash theme={null} curl --request GET \ --url 'https://functions.siro.ai/api-externalApi/v1/core/recordings/{id}?showCrmLinks=true&showSummary=true&showEntityExtractions=true&showFollowups=true' \ --header 'Authorization: Bearer ' ``` ```json theme={null} { "data": { "id": "1234-1234-1234-1234-1234", "organizationId": "000000000001234", "title": "Appointment to Win", "result": "WON", "createdAt": "2026-06-23T15:42:30.992Z", "updatedAt": "2026-06-23T15:47:05.438Z", "deleted": false, "deletedAt": null, "links": { "web": { "self": "https://app.siro.ai/#/recordings/1234-..." } }, "crm": { "integrationConnectionId": "1234-1234-12345", "users": [{ "id": "1234-...", "externalId": "22222" }], "engagement": { "id": "1234-...", "externalId": "1111" }, "contacts": [{ "id": "1234-...", "externalId": "123" }], "account": { "id": "1234-...", "externalId": "1234" }, "opportunity": null, "lead": null }, "summary": [ { "id": "111111-...", "name": "Meeting Booked", "content": "Yes" } ], "entityExtractions": [ { "name": "Tech Systems", "value": "None", "mappings": [{ "crmModelName": "Contact", "crmFieldName": "customer_notes" }] } ], "followups": [ { "followupId": "abcd-...", "recordingId": "1234-1234-1234-1234-1234", "recordingTitle": "Appointment to Win", "followupType": "REHASH", "score": 4, "status": "TO_DO", "starred": false, "followupAction": "Call back to address pricing objection", "repId": "rep-...", "repName": "Alex Rep", "teamId": "team-...", "teamName": "East Region", "dateCreated": "2026-06-23T15:50:00.000Z", "updatedAt": "2026-06-23T15:50:00.000Z", "context": [ { "header": "MAIN_OBJECTION", "value": "Price too high" } ], "thinking": "Strong intent with a clear pricing objection." } ] } } ``` # Get recording by ID Source: https://docs.siro.ai/api-references/get-recording-details specs/openapi-internalApi.json get /v1/core/recordings/{id} Get a single recording by ID with optional related data # Get recording summaries Source: https://docs.siro.ai/api-references/get-recording-summaries get /v1/core/recordings/{id}/summaries Get recording summaries # Get recording utterances Source: https://docs.siro.ai/api-references/get-recording-utterances specs/openapi-internalApi.json get /v1/core/recordings/{id}/utterances Get utterances for a specific recording with pagination support # Get recordings Source: https://docs.siro.ai/api-references/get-recordings specs/openapi-externalApi.json get /v1/core/recordings Get recordings Returns a paginated list of recordings. By default each item contains the recording's core fields; opt into the enrichment blocks below to also pull CRM links, the AI summary, entity extractions, and followup summaries for every recording in the page. ## Deleted recordings Every recording carries two core fields (always present, no opt-in required) that tell you whether it has been deleted in Siro: | Field | Shape | Description | | - | - | - | | `deleted` | `boolean` | `true` if the recording has been deleted, `false` otherwise | | `deletedAt` | `string \| null` | ISO 8601 timestamp of when it was deleted, or `null` if it has not been deleted | Deleted recordings are **still returned** by this endpoint — they are not filtered out. This lets you detect deletions when polling with the `updatedAt` filters and reconcile them in your own system (deleting a recording bumps its `updatedAt`). Treat `deleted: true` as a signal to hide or remove the recording on your side; the Siro app already hides these from its Recordings view. ## Enriching the response The org-scoped recordings endpoints can optionally hydrate extra blocks of data, each behind an opt-in query flag: | Flag | Adds | Use it to | | - | - | - | | `showCrmLinks` | `crm` — external IDs for the CRM records linked to the recording | Map a recording back to the appointment / account / contact in your CRM | | `showSummary` | `summary` — the recording's AI summary sections | Pull conversation summaries into your pipeline (e.g. post-call personalization) | | `showEntityExtractions` | `entityExtractions` — extracted values and their CRM field mappings | Write extracted fields back to your CRM | | `showFollowups` | `followups` — AI-generated followups for the recording | Surface followup scores and (on the single-recording endpoint) full followup detail | They are **off by default** and additive — omit them and the response is unchanged. Pass `=true` to enable. ### `crm` — CRM link IDs When `showCrmLinks=true`, `crm` contains the external IDs of the CRM records the recording is linked to. Every linked object is returned as a pair: * **`id`** — Siro's internal ID for the object * **`externalId`** — that object's ID **in your CRM** (use this to join) | Field | Shape | CRM object | | - | - | - | | `integrationConnectionId` | `string` | The Siro integration connection the links came from | | `users` | array of `{id, externalId}` | CRM user(s) who own the recording (the rep) | | `engagement` | `{id, externalId}` | The CRM engagement / **appointment** | | `opportunity` | `{id, externalId}` | The opportunity | | `contacts` | array of `{id, externalId}` | Contact(s) | | `account` | `{id, externalId}` | Account | | `lead` | `{id, externalId}` | Lead | This is the same shape emitted by the `integrations.recordingProcessed` webhook, so pull-based polling and push-based webhooks give you identical CRM references. `crm` is `null` when the recording has no confirmed CRM link yet. Because links can be established after a recording is created, poll the [list endpoint](/api-references/get-recordings) with the `updatedAt` filters to pick up recordings as they become linked. `engagement` (the appointment) is only populated when the recording is linked to a **CRM-sourced** engagement. Recordings linked only to a Siro-side calendar event return `engagement: null` while still returning `account` / `contact`. To map on the appointment ID, ensure your appointments sync to Siro as CRM engagements. Any field with no linked record is `null`. ### `summary` When `showSummary=true`, `summary` is the recording's AI summary as an ordered array of sections: | Field | Description | | - | - | | `id` | Summary section ID | | `name` | Section title (the prompt header) | | `content` | Generated summary text | Returns `[]` if the recording has no summary yet. ### `entityExtractions` When `showEntityExtractions=true`, `entityExtractions` is a flat list of the values extracted from the conversation, including the CRM field each maps to: | Field | Description | | - | - | | `name` | The extracted field name | | `value` | The extracted value | | `mappings` | CRM target(s): `[{ crmModelName, crmFieldName }]` — which object and field to write `value` to | Only successfully completed extractions are included; in-progress or failed extractions are omitted. Returns `[]` if there are none. Use `mappings` to write each `value` to the corresponding field on the CRM record from the `crm` block. ### `followups` When `showFollowups=true`, `followups` is an array of AI-generated followups tied to the recording. The payload differs by endpoint: **List** (`GET /v1/core/recordings`) returns slim summaries: | Field | Description | | - | - | | `id` | Followup ID | | `score` | Followup score (1–5) | Use [Get recording](/api-references/get-recording) with `showFollowups=true` when you need the full followup payload for a specific recording. **Single recording** (`GET /v1/core/recordings/{id}`) returns the full followup payload, including: | Field | Description | | - | - | | `followupId` | Followup ID | | `score` | Followup score (1–5) | | `status` | `TO_DO`, `IN_PROGRESS`, or `COMPLETE` | | `followupAction` | Suggested action text | | `context` | Array of `{ header, value }` context items | | `thinking` | Score breakdown / reasoning | ### Example ```bash theme={null} curl --request GET \ --url 'https://functions.siro.ai/api-externalApi/v1/core/recordings?updatedAt:gte=2026-06-23T00:00:00.000Z&showCrmLinks=true&showSummary=true&showEntityExtractions=true&showFollowups=true' \ --header 'Authorization: Bearer ' ``` ```json theme={null} { "data": [ { "id": "1234-1234-1234-1234-1234", "organizationId": "000000000001234", "title": "Appointment to Win", "result": "WON", "createdAt": "2026-06-23T15:42:30.992Z", "updatedAt": "2026-06-23T15:47:05.438Z", "deleted": false, "deletedAt": null, "links": { "web": { "self": "https://app.siro.ai/#/recordings/1234-..." } }, "crm": { "integrationConnectionId": "1234-1234-12345", "users": [{ "id": "1234-...", "externalId": "22222" }], "engagement": { "id": "1234-...", "externalId": "1111" }, "contacts": [{ "id": "1234-...", "externalId": "123" }], "account": { "id": "1234-...", "externalId": "1234" }, "opportunity": null, "lead": null }, "summary": [ { "id": "111111-...", "name": "Meeting Booked", "content": "Yes" } ], "entityExtractions": [ { "name": "Tech Systems", "value": "None", "mappings": [{ "crmModelName": "Contact", "crmFieldName": "customer_notes" }] } ], "followups": [ { "id": "abcd-...", "score": 4 } ] } ] } ``` ### Putting it together A typical pipeline poll: 1. Call `GET /v1/core/recordings?updatedAt:gte=&showCrmLinks=true` to fetch recordings linked since your last poll, with their CRM IDs. 2. Join each recording to your CRM using `crm.engagement.externalId` (appointment) / `crm.account.externalId` / etc. 3. For recordings you want to enrich, request `showSummary` / `showEntityExtractions` (on this list call or the [single-recording endpoint](/api-references/get-recording)) and write `entityExtractions` values back using their `mappings`. # Get recordings Source: https://docs.siro.ai/api-references/get-recordings-list specs/openapi-internalApi.json get /v1/core/recordings Get recordings with optional filtering and pagination Returns a paginated list of recordings visible to the authenticated user. Admins and coaches see recordings across their organization and teams; regular users see their own recordings. ## Pagination Use `limit` (default 100, max 100) and the `cursor` from the previous response to walk pages. The cursor is opaque — pass it back unchanged. ## Common filters | Parameter | Use | | - | - | | `organizationId` | Scope to one organization | | `teamId` | One or more team IDs (comma-separated) | | `conversationType` | Filter by conversation type name(s), comma-separated | | `result` | `closed`, `not closed`, or `in progress` | | `dateCreated:gt` / `dateCreated:lt` | ISO 8601 UTC window on recording creation | | `crmLinkStatus` | `unlinked` — recordings with no confirmed CRM customer link | | `orderBy` / `orderDirection` | Sort by any filterable field (`asc` or `desc`) | ## Optional enrichments | Flag | Adds | | - | - | | `showCrmCustomer=true` | `crmCustomer` block per recording | | `showFollowups=true` | `followups` array per recording | | `showEvaluationScore=true` | Evaluation score per recording | ## Related endpoints For full recording payloads (summary, entity extractions, signed video URL), use [Get recording details](/api-references/get-recording-details). For org-wide bulk sync with CRM link IDs, see the org-scoped [Get recordings](/api-references/get-recordings) endpoint. To list followups across recordings, see [Get followups](/api-references/get-followups). # Get scorecard instances Source: https://docs.siro.ai/api-references/get-scorecard-instances specs/openapi-internalApi.json get /v1/core/scorecards/instances Get scorecard instances for an organization with optional filtering. ## Why you'd call this This is how you discover the **scorecard instance `id`** you'll pass to [Get evaluated scorecard instance](/api-references/get-evaluated-scorecard-instance). A scorecard instance is the saved configuration (sections, metrics, weights, color thresholds) used to grade a slice of recordings for a given organization and conversation type. Typical flow: Call this endpoint with `organizationId` (required) and optionally `conversationTypeId` and `isActive=true`. Most orgs have one active instance per conversation type. Each item in the response carries an `id`. Pass that `id` to [Get evaluated scorecard instance](/api-references/get-evaluated-scorecard-instance) along with `startAt`, `endAt`, `filterBy`, and `filterByIds`. Non-admin callers only see active instances scoped to their own organization and assigned conversation types. Org/group/Siro admins see every instance for the requested org. # Get available scorecard metrics Source: https://docs.siro.ai/api-references/get-scorecard-metrics-available specs/openapi-internalApi.json get /v1/core/scorecards/scorecard-metrics/available Get available scorecard metrics for an organization, conversation type, organization group, or all metrics (Siro admin only).The user must have appropriate access to the requested scope. # Get scorecard metrics values Source: https://docs.siro.ai/api-references/get-scorecard-metrics-values specs/openapi-internalApi.json get /v1/core/scorecards/scorecard-metrics/values Get scorecard metrics values for an organization and conversation typewithin a specified time range and filter criteria. The user must have access to the requested organization. # Get all teams for an org Source: https://docs.siro.ai/api-references/get-teams get /v1/core/organizations/{orgId}/teams Returns all teams for an org with pagination # Get a user by ID Source: https://docs.siro.ai/api-references/get-user get /v1/core/users/{id} Returns a user document when the caller is the user, a Siro admin, an org admin for the user org, or a coach in the same organization. # List users Source: https://docs.siro.ai/api-references/get-users get /v1/core/users Lists users scoped to the caller role. # Download redacted recording audio (signed URL) Source: https://docs.siro.ai/api-references/post-recording-audio-signed-url specs/openapi-internalApi.json post /v1/core/recordings/{id}/signedUrl Returns a short-lived signed URL to download the **redacted** recording audio (typically `.m4a`). Call **`POST`** with an empty body after the recording exists. **Authentication:** user-scoped **`x-siro-auth-token`** (client app access token or Siro OAuth). This is **not** the org-wide upload flow—use **`POST /v1/core/recordings/signed-urls`** on the user-scoped API when uploading **before** a recording id exists. **Authentication:** User-scoped API — send a [client app](/authentication) access token (or Siro OAuth token) in header **`x-siro-auth-token`**. Returns a **short-lived signed URL** to fetch the **redacted** recording audio (typically **`.m4a`**). Call **`POST`** with **no body**; path **`id`** is the **Siro recording id** (same as [Get recording](/api-references/get-recording-details)). **Not upload:** To upload audio **before** a recording exists, use **`POST /v1/core/recordings/signed-urls`** on the Recordings upload flow — see [Post recordings signed urls](/api-references/post-recordings-signed-urls). # Get a signed URL for uploading a recording Source: https://docs.siro.ai/api-references/post-recordings-signed-urls post /v1/core/recordings/signed-urls Generate signed upload and download URLs for an audio file. The upload URL can be used to upload the file directly to cloud storage. Generates a short-lived **signed upload URL** for an audio file plus a matching **download URL**. This is the first step of the direct-upload flow: upload your audio to cloud storage with `uploadUrl`, then pass `downloadUrl` as `fileUrl` to [Post recordings upload](/api-references/post-recordings-upload) to create the recording. ## Response fields | Field | Description | | - | - | | `uploadUrl` | Signed URL to **`PUT`** the file body to (Google Cloud Storage). | | `uploadHeaders` | Headers you **must** send with the `PUT` — see below. | | `downloadUrl` | Pass this as `fileUrl` when creating the recording. | | `expiresAt` | When the signed URLs expire (ISO 8601). Upload before this time. | ## Required upload headers The values of `Content-Type` and `x-goog-content-length-range` are **baked into the signature** of `uploadUrl`. You must send them **exactly** as returned in `uploadHeaders`, or GCS rejects the upload with a `403 SignatureDoesNotMatch`. * **`Content-Type`** — the MIME type for the `fileType` you requested. Siro maps extensions as follows: | `fileType` | `Content-Type` | | - | - | | `mp3` | `audio/mpeg` | | `wav` | `audio/wav` | | `aac` | `audio/aac` | * **`x-goog-content-length-range`** — `0,`, where `` is the exact byte size you passed in the request. The uploaded body must fall within this range. ## Example upload ```bash theme={null} # 1. Request the signed URLs curl -X POST https://api.siro.ai/v1/core/recordings/signed-urls \ -H "x-siro-auth-token: $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"fileType": "mp3", "fileSize": 1048576}' # Response: # { # "data": { # "uploadUrl": "https://storage.googleapis.com/...", # "uploadHeaders": { # "Content-Type": "audio/mpeg", # "x-goog-content-length-range": "0,1048576" # }, # "downloadUrl": "https://storage.googleapis.com/...", # "expiresAt": "2026-06-08T12:00:00.000Z" # } # } # 2. PUT the file to uploadUrl, echoing uploadHeaders verbatim curl -X PUT "$UPLOAD_URL" \ -H "Content-Type: audio/mpeg" \ -H "x-goog-content-length-range: 0,1048576" \ --data-binary @recording.mp3 ``` Then call [Post recordings upload](/api-references/post-recordings-upload) with `fileUrl` set to `downloadUrl`. # Create a recording from a phone call Source: https://docs.siro.ai/api-references/post-recordings-upload post /v1/core/recordings/upload Creates a new recording from an external phone call source. # Create or replace CRM link on a recording Source: https://docs.siro.ai/api-references/put-recording-crm-link specs/openapi-internalApi.json put /v1/core/recordings/{id}/link Links the recording to a CRM Account, Contact, Lead, Opportunity, or Engagement (server clears prior links as needed). **Path parameter `id`:** Siro’s internal **recording** id (from recording list/detail APIs). It is not a CRM external id. **Request body — pick one way to point at the CRM row** 1. **Siro internal id:** set **`id`** to the integrations DB id of the Account, Contact, Lead, Opportunity, or Engagement (the synced CRM row’s primary key in Siro—not a **Siro User** id). Do not send `externalId` or `integrationConnectionId`. 2. **CRM-native id:** set **`externalId`** to the id in the source CRM **and** **`integrationConnectionId`** to the Siro integration connection for that tenant. Do not send `id`. **Always include `dataType`** (`ACCOUNT`, `CONTACT`, `LEAD`, `OPPORTUNITY`, or `ENGAGEMENT`). **`trigger`** is optional; allowed values appear in the request schema below. **Validation (typical 422)** The API rejects the body if you send both `id` and `externalId`, neither, or `externalId` without a non-empty `integrationConnectionId`. **Examples** ```json theme={null} { "dataType": "ACCOUNT", "id": "01HZX0M4K3N7Q2V8R9T0Y1A2B3C" } ``` ```json theme={null} { "dataType": "OPPORTUNITY", "externalId": "006xx0000123456", "integrationConnectionId": "01HABCD1234567890EFGHIJKLMN" } ``` # Revoke an API client Source: https://docs.siro.ai/api-references/revoke-a-client-app delete /v1/core/m2m-clients/{organizationId}/{clientId} Revokes the client and all of its secrets immediately. This cannot be undone. Revokes a [client app](/authentication) and all of its secrets immediately. This cannot be undone. # Rotate an API client secret Source: https://docs.siro.ai/api-references/rotate-a-client-app-secret post /v1/core/m2m-clients/{organizationId}/{clientId}/rotate-secret Issues a new secret and returns it once. The client id does not change, the previous secret keeps working until the next rotation, and only the caller who created the client can rotate it. Issues a new secret for an existing [client app](/authentication). The `clientId` does not change. The new `clientSecret` is returned **once**. Store it immediately. The previous secret keeps working until you rotate again. Only the caller who created the client can rotate it. # Sync an engagement Source: https://docs.siro.ai/api-references/sync-an-engagement put /v1/integrations/sync/engagements Sync an engagement # Sync an opportunity Source: https://docs.siro.ai/api-references/sync-an-opportunity put /v1/integrations/sync/opportunities Sync an opportunity # Update a single team within a single org Source: https://docs.siro.ai/api-references/update-a-team patch /v1/core/organizations/{orgId}/teams/{teamId} Update a single team within a single org # Update an engagement user Source: https://docs.siro.ai/api-references/update-an-engagement-user put /v1/integrations/engagement-users/{id} Update an engagement user # Update a single integration connection within a given org Source: https://docs.siro.ai/api-references/update-an-integration-connection patch /v1/core/integrations/connections/{id} Update a single integration connection within a given org # Update an opportunity user Source: https://docs.siro.ai/api-references/update-an-opportunity-user put /v1/integrations/opportunity-users/{id} Update an opportunity user # Update an organization Source: https://docs.siro.ai/api-references/update-organization patch /v1/core/organizations/{id} Updates the organization for the given ID. Root admins or org admins of the organization may call this endpoint. # Update user Source: https://docs.siro.ai/api-references/update-user put /v1/core/users/{id} # Upsert Salesforce integration authentication details Source: https://docs.siro.ai/api-references/upsert-a-salesforce-integration-connection put /v1/core/integrations/salesforce Upsert Salesforce integration authentication details # Recording linked Source: https://docs.siro.ai/api-references/webhook-recording-linked specs/webhooks.json webhook integrations.recordingLinked Emitted when a recording has been definitively linked to a CRM object. The `crm` field is always populated on this event. Siro sends this event to your receiver. The **Authorization** field below is a limitation of the docs renderer and does not apply here — your receiver authenticates inbound webhooks on its own. # Recording processed Source: https://docs.siro.ai/api-references/webhook-recording-processed specs/webhooks.json webhook integrations.recordingProcessed Emitted when a recording has been fully processed. If the recording is also definitively linked to a CRM object at the time of processing, the `crm` field will be populated. # Authentication Source: https://docs.siro.ai/authentication Authenticate to org-wide and user-scoped APIs with one client app. Siro is consolidating API auth onto **client apps**. One credential can call both the org-wide API (`functions.siro.ai`) and the user-scoped API (`api.siro.ai`). Organization API tokens and Siro OAuth apps still work. New integrations should use client apps. Org API tokens follow the timeline below. Siro OAuth apps stay valid until a separate decommission date is announced. ## What replaces what | Today | Use instead | Notes | | - | - | - | | Org API token (`Authorization: Bearer`, org-wide API only) | Client app access token | Same `Authorization: Bearer` header | | Siro OAuth app + `x-siro-auth-token` (user-scoped API only) | Client app access token | Same `x-siro-auth-token` header | Client apps are org-scoped machine credentials. They are not tied to a logged-in user. ## Timeline Dates are measured from the client app release. | When | What happens | | - | - | | Client app release | Client apps are available. Existing org API tokens and Siro OAuth apps keep working. | | 30 days after release | Creating new org API tokens is turned off. Tokens that already exist keep working. | | 9 months after creation is turned off | Org API tokens are decommissioned. They no longer authenticate. | ## Walkthrough ### 1. Create a client app in the Siro web app As an org admin, create a client app in the Siro web app under the `API access` tab, or with the [client app APIs](/api-references/create-a-client-app). Copy the `client_id` and `client_secret` when they are shown — the secret is returned **once**. Rotate or revoke from the same UI or via [rotate](/api-references/rotate-a-client-app-secret) and [revoke](/api-references/revoke-a-client-app). ### 2. Exchange credentials at auth.siro.ai ```bash theme={null} curl --request POST \ --url "https://auth.siro.ai/oauth2/token" \ --header "Content-Type: application/x-www-form-urlencoded" \ --data "grant_type=client_credentials" \ --data "client_id=$CLIENT_ID" \ --data "client_secret=$CLIENT_SECRET" ``` Response: `access_token`, `token_type: bearer`, `expires_in` (typically 3600 seconds). There is no refresh token — mint again before expiry. Full reference: [Get an access token](/api-references/get-a-client-app-access-token). ### 3. Call either API **Org-wide** ```bash theme={null} curl --request GET \ --url "https://functions.siro.ai/api-externalApi/v1/core/recordings?pageSize=100" \ --header "Authorization: Bearer $ACCESS_TOKEN" ``` **User-scoped** ```bash theme={null} curl --request GET \ --url "https://api.siro.ai/v1/core/recordings/$RECORDING_ID?showSummary=true" \ --header "x-siro-auth-token: $ACCESS_TOKEN" ``` # Quickstart Guide: Building a Custom API CRM Integration Source: https://docs.siro.ai/getting-started Learn how to build a custom API CRM integration with Siro. Sync appointments, automatically link recordings to CRM records, and pull extracted conversation data back to your system. ## Overview ### What you'll build A bidirectional integration enabling: * Automatic recording-to-opportunity matching * CRM context in Siro (customer names, deal amounts, outcomes) * Entity extraction data flowing back to your CRM ### Time estimate 4-8 hours for a developer familiar with REST APIs ### Prerequisites * API development experience * Admin access to your Siro workspace * Your system exposes appointment/opportunity data via API or database *** ### Step 1: Get Your Siro API Credentials **Preferred:** a [client app](/authentication). One access token works on both the org-wide and user-scoped APIs. 1. Create a client app in the Siro web app (org admin). Store `client_id` and `client_secret`. 2. Exchange them at `https://auth.siro.ai/oauth2/token`. 3. Send `Authorization: Bearer ` on org-wide (`functions.siro.ai`) calls. Send `x-siro-auth-token: ` on user-scoped (`api.siro.ai`) calls. Org API tokens (Person icon → API Tokens) and Siro OAuth apps still work during the transition. See [Authentication](/authentication). ### API Base URL Most API calls use: ``` https://functions.siro.ai/api-externalApi/v1 ``` **Authentication:** ```bash theme={null} curl --request GET \ --url 'https://functions.siro.ai/api-externalApi/v1/core/mobile-events?pageSize=100' \ --header 'Authorization: Bearer ' ``` **Documentation:** Full API reference at [docs.siro.ai](https://docs.siro.ai) *** ## Step 2: Understand the Basics of the Data Model Siro's integration data model maps to standard CRM concepts. ### CRM entity IDs * **Siro-internal id** (`id`): The UUID Siro stores for a synced CRM row (account, engagement, opportunity, external user, etc.). Use this when an API accepts our primary key—for example when [linking a recording to CRM entities](/api-references/put-recording-crm-link)—or when reading ids from webhooks and detail payloads. * **CRM-native id** (`externalId`): The identifier in *your* CRM (for example a Salesforce Id). When you target entities by `externalId`, also send **`integrationConnectionId`** so Siro knows which CRM connection that id belongs to. ### People: Siro Users vs External Users * **Siro User**: Someone who can sign into your Siro workspace (web or mobile). This maps to a **`SiroUser`** in our database. Examples: recording **`userId`** on recording detail, webhook **`siroUserId`**. * **External User** (same concept as **CRM User**): The synced representation of a rep or roster row from your CRM—the API resource named **`User`**. Sync payloads include **`externalId`**, **`email`**, and **`name`**; Siro maps External Users to **Siro Users** for attribution (automatic match, or manually via **People → Users →** select a user **→ Integrations → Connect**). | Your System | In Siro / API | Purpose | | - | - | - | | Sales rep / roster row in CRM | External User (`User`) | CRM-side identity; maps to a **Siro User** for workspace login and attribution | | Customer / Account | `Account` | Customer information | | Opportunity / Deal / Lead | `Opportunity` | Sales outcomes with dollar values | | Appointment / Meeting | `Engagement` | Scheduled interactions that get recorded | | Recording | `Recordings` | Siro recording | ### Key Relationship The critical link is: **Recording ↔ Engagement ↔ Opportunity AND/OR Account** When you sync an Engagement to Siro with appointment details (time, location, rep), Siro can automatically match recordings to that engagement and surface the linked Opportunity context. *** ## Step 3: Sync Your Data to Siro #### 3.1 Link External Users to Siro Users User linking happens automatically. When you sync engagements or opportunities, include each rep’s CRM identifiers on **`User`** payloads (`externalId`, `email`, and `name`). Siro maps **External Users** to **Siro Users** by email or name match. Manual override: go to **People → Users**, select the user, and press **Connect** (or the edit icon) on the integration in their **Integrations** card. ### 3.2 Sync Appointments (Engagements) **This is the core of the integration.** Syncing engagements enables appointment lists for reps, automatic recording linking, and CRM context for AI features. **Endpoint:** `PUT /v1/integrations/sync/engagements` • [Full docs](https://docs.siro.ai/api-references/sync-an-engagement) **Example request:** ```bash theme={null} curl --request PUT \ --url 'https://functions.siro.ai/api-externalApi/v1/integrations/sync/engagements' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '@-' <' \ --header 'Content-Type: application/json' \ --data '@-' < Webhooks endpoints list 2. Click **+ Add Endpoint**. Fill in your **Endpoint URL** (the HTTPS URL where you want to receive events), an optional **Description**, and select the events to subscribe to. Check both **integrations.recordingLinked** and **integrations.recordingProcessed**. Add a new webhook endpoint 3. After saving, you'll see the endpoint detail page with your **Signing Secret**. Copy this secret — you'll use it to verify that incoming webhook payloads are authentic. Webhook endpoint detail with signing secret You can test your endpoint before going live using the **Testing** tab on the endpoint detail page, or by using [Webhook.site](https://webhook.site) to inspect payloads without setting up a server. **Verifying webhook signatures** Every webhook delivery includes three headers used for verification: | Header | Description | | - | - | | `svix-id` | Unique message identifier | | `svix-timestamp` | Timestamp in seconds since epoch | | `svix-signature` | Base64-encoded signature(s), e.g. `v1,` | The recommended approach is to use the official Svix library, which handles signature construction and timestamp tolerance for you. ```js Node.js theme={null} import { Webhook } from "svix"; // npm install svix const secret = "whsec_YOUR_SIGNING_SECRET"; export default async function handler(req, res) { const payload = (await buffer(req)).toString(); // raw body const headers = req.headers; const wh = new Webhook(secret); try { wh.verify(payload, headers); } catch (err) { return res.status(400).json({}); } // Signature valid — process the event res.json({}); } ``` ```python Python theme={null} from svix.webhooks import Webhook, WebhookVerificationError # pip install svix secret = "whsec_YOUR_SIGNING_SECRET" def webhook_handler(request): payload = request.body headers = request.headers wh = Webhook(secret) try: msg = wh.verify(payload, headers) except WebhookVerificationError: return HttpResponse(status=400) # Signature valid — process the event return HttpResponse(status=200) ``` ```go Go theme={null} import svix "github.com/svix/svix-webhooks/go" // go get github.com/svix/svix-webhooks/go secret := "whsec_YOUR_SIGNING_SECRET" wh, err := svix.NewWebhook(secret) err = wh.Verify(payload, headers) // returns nil on success ``` You **must** use the raw request body when verifying. Parsing the JSON first and re-serializing it will break the signature. Subscribe to **both** event types. Every delivery carries the current state of both flags regardless of which event triggered it, which is what makes the filtering rule in 4.2 work without any correlation logic on your side. ### 4.2 Handle Webhook Payloads Both event types share the same payload shape: ```json theme={null} { "recordingId": "rec-abc-def", "siroUserId": "siro-user-123", "siroTeamId": "siro-team-456", "recordingProcessed": true, "recordingLinked": true, "eventType": "integrations.recordingProcessed", "crm": { "integrationConnectionId": "conn-123", "users": [{ "id": "user-uuid", "externalId": "crm-user-123" }], "engagement": { "id": "eng-uuid", "externalId": "appt-456" }, "opportunity": { "id": "opp-uuid", "externalId": "opp-101" }, "account": { "id": "acct-uuid", "externalId": "account-789" } } } ``` Key fields: * `recordingProcessed` / `recordingLinked` — current boolean state of each condition. Every payload reports both, regardless of which event was emitted. * `siroUserId` — **Siro User** id for the rep associated with the recording. * `siroTeamId` — **Siro Team** id that owns the recording. Use it to ignore recordings from teams your integration doesn't care about. Recordings are owned by a single team; omitted when the recording has no team. Matches the `teamId` returned by [Get Recording Details](/api-references/get-recording). * `crm.users[]` — linked **External Users**; `id` is Siro-internal for that user row, `externalId` is the id from your CRM (when set). * `crm.engagement` / `crm.opportunity` / `crm.account` — each includes Siro-internal `id` plus CRM-native `externalId` where applicable. * `crm.engagement.externalId` — the appointment ID you originally synced (from 3.2). * `crm.opportunity.externalId` — the opportunity ID you originally synced (from 3.3). **Filtering rule:** act only when both `recordingProcessed` and `recordingLinked` are `true`. Because every delivery reports current state for both conditions, the handler for whichever event fires last will naturally observe `true` / `true` — no correlation or state machine is needed. **Example handler:** ```ts theme={null} async function onSiroWebhook(payload) { if (!payload.recordingProcessed || !payload.recordingLinked) { // Not ready yet — the other event will arrive. return; } const { recordingId, crm } = payload; const engagementExternalId = crm?.engagement?.externalId; const opportunityExternalId = crm?.opportunity?.externalId; // Fetch enriched data — see 4.3 const recording = await fetchRecordingDetails(recordingId); await yourCrm.attach({ engagementExternalId, opportunityExternalId, summary: recording.summary, extractions: recording.entityExtractions, }); } ``` **Idempotency:** because the "both true" condition can be observed twice (once per event), dedupe by `recordingId` if your downstream side-effects aren't idempotent. ### 4.3 Get Recording Details (Summary + Entity Extractions) **Endpoint:** `GET /v1/core/recordings/{recordingId}` **Base URL:** `https://api.siro.ai` **Note:** This base URL is different from the main external API (`https://functions.siro.ai/api-externalApi/v1`). It matches the base used by the Entity Extractions endpoint (4.5). **Authentication:** `x-siro-auth-token` with a client app access token — see [Authentication](/authentication). Legacy Siro OAuth tokens use the same header. **Query parameters:** | Param | Type | Purpose | | - | - | - | | `showSummary` | boolean | Include the concatenated LLM summary in the response | | `showEntityExtractions` | boolean | Include per-definition entity extractions with CRM mappings | Both default to `false`. **Example request:** ```bash theme={null} curl --request GET \ --url 'https://api.siro.ai/v1/core/recordings/rec-abc-def?showSummary=true&showEntityExtractions=true' \ --header 'x-siro-auth-token: YOUR_ACCESS_TOKEN' ``` **Response (relevant fields):** (`userId` is the **Siro User** id; see [People: Siro Users vs External Users](#people-siro-users-vs-external-users) in Step 2.) ```json theme={null} { "data": { "id": "rec-abc-def", "organizationId": "org-789", "userId": "user-123", "summary": "Overview:\nThe rep walked the customer through financing options.\n\nNext Steps:\nSend a written proposal by Friday.", "entityExtractions": [ { "id": "extraction_001", "recordingId": "rec-abc-def", "siroEntityDefinitionId": "def-uuid", "siroEntityDefinitionName": "Budget", "status": "SUCCESS", "extraction": [ { "name": "Budget", "value": "$40,000 - $50,000", "mappings": [ { "crmModelName": "Opportunity", "crmFieldName": "Budget__c" } ] } ] } ] } } ``` **Use case:** in a single round-trip, pull both the conversation summary and any extracted custom fields ready to write back to your CRM. *** ## Alternative: Polling Flow If webhooks aren't an option for your environment, use the engagement endpoint to poll for linked recordings and pull enriched data from the endpoints below. Entity extractions (4.5) are user-scoped; send the client app token as `x-siro-auth-token`. ### 4.4 Get Linked Recording for an Engagement **Endpoint:** `GET /v1/integrations/engagements/{id}` • [Full docs](https://docs.siro.ai/api-references/get-an-engagement) **Response includes:** ```json theme={null} { "id": "eng-123", "externalId": "appt-456", "recordingId": "rec-abc-def", "engagementType": "appointment", "opportunityId": "opp-101", "accountId": "account-789" } ``` Use the `recordingId` to fetch detailed data. ### 4.5 Get Entity Extractions (CRM Autofill Data) **Endpoint:** `GET /v1/core/entities/extractions/{recordingId}` • [Full docs](https://docs.siro.ai/api-references/get-extractions) **Base URL:** `https://api.siro.ai` **Note:** This base URL is different from other API endpoints. **Authentication:** `x-siro-auth-token` with a client app access token. Legacy Siro OAuth tokens use the same header. **Response example:** ```json theme={null} { "data": [ { "id": "extraction_001", "recordingId": "rec-abc-def", "extraction": [ { "name": "Budget", "value": "$40,000 - $50,000" }, { "name": "Timeline", "value": "Spring 2026" }, { "name": "Decision Maker", "value": "Both homeowners present, wife is primary" }, { "name": "Objections", "value": "Concerned about project timeline due to summer vacation plans" } ], "createdAt": "2026-01-28T00:00:00Z", "updatedAt": "2026-01-28T00:00:00Z" } ] } ``` **Use case:** Write extracted fields back to your CRM to auto-populate data from conversations. ### 4.6 Get Recording Summaries **Endpoint:** `GET /v1/core/recordings/{recordingId}/summaries` **Response:** ```json theme={null} { "data": [ { "id": "summary-001", "name": "AI Summary", "content": "Summary text here..." } ] } ``` **Use case:** Write summaries as CRM notes to create an activity trail. *** ## Auto Start/Stop via Deep Linking (Optional) Start Siro recordings directly from your mobile app: **URL format:** ``` siro://record?appointmentId={external-id}&title={customer-name}&opportunityId={opp-external-id} ``` **Example:** ``` siro://record?appointmentId=appt-456&title=Smith Kitchen Remodel&opportunityId=opp-101 ``` Siro will use the `appointmentId` to link the recording to the engagement and `opportunityId` to link the associated opportunity immediately. *** ## Next Steps * **Test it:** Sync a test appointment, record a conversation at that time, and verify CRM context appears * **Automate syncs:** Use real-time webhooks (recommended) or batch jobs every 10 minutes * **Custom fields:** Work with your CSM to configure custom entity extraction fields * **Troubleshoot:** If recordings aren't linking, check **People → Users** and confirm each rep shows the expected entry in the **Integrations** column * **Train your team:** Show reps how recordings link to CRM records *** ## Getting Help **Technical questions:** Email your Customer Success Manager or reach out to [customersuccess@siro.ai](mailto:customersuccess@siro.ai) **API issues:** Include your request details (method, endpoint, payload) and organization ID when reaching out. # Quickstart Guide: Building a Custom API Phone Integration Source: https://docs.siro.ai/phones-integration-getting-started Learn how to build a custom API phone integration with Siro. Get phone call recordings from your VoIP/Phone System into Siro so they're treated as native recordings with full AI insights and coaching. This guide walks you through getting completed phone call recordings from your VoIP/Phone System into Siro so they’re treated as *Siro native* recordings. You’ll build a simple 3-step pipeline: * **Notify:** Detect when a call ends and the recording is ready. * **Fetch:** Download the audio from your VoIP provider. * **Forward:** Upload phone recordings into Siro # Overview **What you'll build:** A 3-step pipeline enabling: * Automatic ingestion of completed phone recordings into Siro * Rep attribution and CRM linking for phone recordings * Siro’s AI insights and coaching on phone recordings **Prerequisites:** * API development capabilities * Admin access to Siro workspace * A VoIP/Phone System with recording export/download and API access *** # Step 1: Get Your Siro API Credentials Use a [client app](/authentication). One access token covers org-wide and user-scoped endpoints, including upload. 1. Create a client app in the Siro web app (org admin). Store `client_id` and `client_secret`. 2. Exchange credentials at `https://auth.siro.ai/oauth2/token`. 3. Send `x-siro-auth-token: ` on the upload calls below. Org API tokens and Siro OAuth still work during the transition. ### API Base URL The signed-urls endpoint lives in Siro’s API Gateway, with the base URL: `https://api.siro.ai/` **Authentication:** `x-siro-auth-token` with a [client app](/authentication) access token, or a Siro OAuth token. ```bash theme={null} curl --request POST \ --url 'https://api.siro.ai/v1/core/recordings/signed-urls' \ --header 'x-siro-auth-token: ' ``` *** # Step 2: Understand the Basics of the Data Model Siro's integration data model to map recordings to reps and CRM objects: | Your System | Siro Equivalent | Purpose | | - | - | - | | Sales rep/agent | `userId` | **Siro User** id (UUID)—the rep’s workspace login; not a CRM `externalId` | | Rep email | `userEmail` | Fallback to link the recording to the rep on call | | Rep phone number | `userPhone` | Fallback to link the recording to the rep on call | | Recorded audio file | `fileUrl` | Points to the audio file for Siro to ingest and transcribe | | Call start time | `dateCreated` | Sets the actual call timestamp in Siro (not the upload time) | | Your connected CRM account | `integrationConnectionId` | Identifies the connected CRM instance (your Salesforce, HubSpot, Dynamics, etc.) so CRM linking is scoped correctly | | CRM record IDs you want to link (Opportunity, Account, Contact, Lead, etc.) | `crmObjects[] = {objectType, objectId}` | Creates definite links to CRM entities Siro already knows for that connection (see [CRM entity IDs](/getting-started#crm-entity-ids)) | | Contact phone | `contactPhone` | Fallback to link recording to CRM object when CRM object IDs are not shared | | Contact name | `contactName` | Fallback to link recording to CRM object when CRM object IDs are not shared | ## Key Relationships ### **Recording ↔ User** * **Prerequisite** : Your reps must be set up in Siro as users so recordings can be uploaded and properly attached to the correct rep * To successfully link a recording to a user, share the **`userId`** (**Siro User** UUID) to create a definite link to the rep. * If no `userId` is provided, `userEmail` or `userPhone` will be used to look up the rep and link the recording the associated rep. * Once the recording is linked to a user, it is attributed to the rep in Siro and treated as Siro native recording, which unlocks the same features and insights as any recording captured directly in Siro, including coaching, call analytics, and insights. ### Recording **↔ CRM Object** * **Prerequisite** : Your CRM must be integrated with Siro to link phone recordings to CRM objects. If you do not have your CRM integrated with Siro yet, reach out to your Customer Success Manager or [support@siro.ai](mailto:support@siro.ai) to get set up. You can also use an API-based CRM integration, follow this guide to get set up [https://docs.siro.ai/Integrations/Available\_Integrations](https://docs.siro.ai/Integrations/Available_Integrations) * To successfully link a recording to a CRM object you must share `integrationConnectionId` and `crmObjects[] = {objectType, objectId}`. `integrationConnectionId` can be retrieved via [GET /v1/core/integrations/connections](https://docs.siro.ai/api-references/get-integration-connections). This creates a definite link to those records. ***Note***: the `objectId` must already be present in our database (either from a native CRM integration or an API-based CRM integration) for the link to be created. * If no `crmObjects[] = {objectType, objectId}` is provided, `contactPhone` and `contactName` will be used to recommend links that can confirmed in the Siro platform. *** # Step 3: Send Phone Call Recordings to Siro ## How It Works 1. Your VoIP system/phone carrier notifies your server when a call ends 2. Your server downloads the audio 3. Your server pushes downloaded audio to Siro ## 3.1 Notify — Detect Call End (Recording Ready Signal) ### VoIP → Your Server Set up a reliable way for your system to detect when a call has ended and its recording is available to fetch from your VoIP. Common approaches include: * **Webhooks:** Have your VoIP provider notify your server when a call ends or when the recording is ready. * **Incremental polling:** Periodically check call logs or recording endpoints until the recording URL becomes available. Use whichever mechanism your VoIP provider supports best (some offer both). ```json theme={null} { "call_id": "call-789", "email": "rep@yourcompany.com", "number": "+14251234563", "recording_url": "https://your-voip.com/recordings/call-789.m4a", "started_at": "2026-02-23T14:00:00Z", "contact_name": "Jane Smith", "contact_phone": "+15551234567" } ``` > *Exact fields vary by VoIP provider — use whatever fields your provider includes as metadata that will be used to facilitate the matching of the recording to a rep and CRM object in Siro as outlined in the data model.* ### Payload Notes * `email` and `number` map to `userEmail` or `userNumber` respectively in the data model and are used to resolve the rep when the`userId` is not available. * Best practice: use the VoIP payload to look up the rep’s Siro `userId` and match the recording to the correct `userId`. This will enable the most reliable linking of recording to a rep. Use this endpoint to get rep’s Siro `userId` to map recordings to reps [https://docs.siro.ai/api-references/get-users](https://docs.siro.ai/api-references/get-users). ## 3.2 Fetch — Download the Audio from Your VoIP Provider ### VoIP → Your Server Use the `recording_url` and your VoIP credentials to download the audio file. Follow the instructions of your VoIP provider for guidance on how to download audio files via API. ### Payload Notes * Supported formats: .mp3, .aac, .wav. * Max File Size: 100MB ## 3.3 Forward — Upload the Phone Recording to Siro ### Your Server → Siro API Uploading to Siro is a three-step process: get a signed URL, upload recording via the signed upload URL, then create the recording in Siro. ### 1. Get a Signed Upload URL & Download URL Post to the signed-urls endpoint to receive an `uploadUrl` to upload your recording to Siro in step 2 and a `downloadUrl` that you pass as `fileUrl` when creating the recording in step 3. **Endpoint:** `POST /v1/core/recordings/signed-urls` • [Full docs](https://docs.siro.ai/api-references/post-recordings-signed-urls) **Request** ```http theme={null} POST /v1/core/recordings/signed-urls x-siro-auth-token: Content-Type: application/json ``` ```json theme={null} { "fileSizeInBytes": 1048576, // required "fileType": "mp3", // required "organizationId": "my-org-id" // optional } ``` **Response** `200 OK` ```json theme={null} { "data": { "uploadUrl": "https://...", "downloadUrl": "https://...", "expiresAt": "2025-02-18T12:00:00.000Z" } } ``` ### **Payload notes** * Use `uploadUrl` to complete upload recording in step 2 * The `downloadUrl` from the response is the value you send as `fileUrl` in step 3 to attach recording metadata to the uploaded recording ### 2. Upload recording to the `uploadUrl` Make a `PUT` request to the `uploadUrl` **Request** ```http theme={null} PUT Content-Type: x-goog-content-length-range: 0, ``` **Response** `2xx OK` * This code means that the recording was uploaded successfully. * The upload must be completed successfully before moving to the next step — creating recording in Siro. ### 3. Create the Recording Once the audio file is uploaded, `POST` to the recordings endpoint. Use the `downloadUrl` from step 1 as the `fileUrl` field in the upload request so Siro can load the uploaded audio and attach the correct metadata: rep attribution, CRM linking, and processing options. **Endpoint:** `POST /v1/core/recordings/upload` • [Full docs](https://docs.siro.ai/api-references/post-recordings-upload) **Request** ```http theme={null} POST /v1/core/recordings/upload x-siro-auth-token: Content-Type: application/json ``` ```json theme={null} { "fileUrl": "https://...", // required; use the downloadUrl from POST /v1/core/recordings/signed-urls "fileType": "string", // required, must be one of 'mp3', 'aac', 'wav' "title": "string", // optional "userId": "string", // optional, defers to email "userEmail": "string", // optional, defers to phone number "userPhone": "string", //optional "organizationId": "string", // optional, defaults to user's org "conversationType": "string", // optional, use default if not provided "integrationConnectionId": "string", // optional; if set, crmObjects must be set too (and vice versa) "crmObjects": { /* CrmObjectReference */ }[], // optional; if set, integrationConnectionId must be set too "contactPhone": "string", // optional "contactName": "string", // optional "dateCreated": "2025-02-18T12:00:00.000Z" // optional } ``` **Response** `201 Created` ```json theme={null} { "data": { "id": "recording-uuid" } ``` ### **Payload notes:** * `dateCreated` : Use the actual call time (not the upload time). * **Recording** **↔ User (rep attribution)** : Provide `userId` when possible. If not, provide `userEmail` or `userPhone` so Siro can attach the recording to the correct rep. * At least one of `userId`, `userEmail`, or `userPhone` must be present; otherwise the recording will not be ingested or processed. * **Recording** **↔ CRM Objects (CRM linking) :** If your CRM is integrated, include both `integrationConnectionId` and `crmObjects` to create a link between the recording and the CRM object (omit both if you are not linking CRM objects this way). * If `crmObjects` are not available to share, share `contactName` and `contactPhone` for suggested linking in Siro. *** # Notes * Recordings should be available in Siro platform within 30 minutes of upload * **Technical questions:** Email your Customer Success Manager or reach out to [support@siro.ai](mailto:support@siro.ai) * **API issues:** Include your request details (method, endpoint, payload) and organization ID when reaching out. # Rate Limits Source: https://docs.siro.ai/rate-limits How rate limits work with the Siro API The rate limit is currently 1000 requests per credential per minute (client app, org API token, or OAuth token). # Scorecard metrics for one recording Source: https://docs.siro.ai/scorecards-metrics-for-recording How to retrieve coaching scorecard results for a single call or consultation. ## What this page covers If you need **scorecard metrics for one specific recording** (for example one consultation tied to a CRM appointment), use: **`GET /v1/core/scorecards/scorecard-metrics/values`** Full technical schema: [Get scorecard metric values](/api-references/get-scorecard-metrics-values). *** ## What to send | Parameter | Plain meaning | | - | - | | `requestedOrganizationId` | Your Siro organization id | | `conversationTypeId` | The recording’s **conversation type**—same value as **`conversationType`** from [Get recording details](/api-references/get-recording-details) | | `startAt` / `endAt` | Date/time window that **includes when the call happened** (standard ISO 8601 timestamps) | | `filterBy` | Set to **`RECORDING`** so results apply to one call | | `filterByIds` | The **recording id**. You can send one id or a list; if you send more than one, only the **first** id is used | Use the same **`x-siro-auth-token`** (client app access token or Siro OAuth) as for other **`api.siro.ai`** requests. See [Authentication](/authentication). *** ## What you get back The response includes **`data.metricValues`**: the calculated coaching metrics for that request, and **`data.recordingsEvaluatedCount`**: how many recordings were included (for one recording id, that count reflects that scope). *** ## Finding which metrics your org supports Before building reports, list available definitions with [Get available scorecard metrics](/api-references/get-scorecard-metrics-available). *** ## Advanced: evaluated scorecard view [**`GET /v1/core/scorecards/evaluated-instances/{id}`**](/api-references/get-evaluated-scorecard-instance) runs a **saved scorecard configuration** (the **`{id}`** in the URL is that configuration's id—not the recording id) and returns the configured tree of sections and metrics with rubric-based scoring, color thresholds, and—for user-level views—AI coaching spotlights with cited quotes. To find the `{id}`, list your org's saved instances with [**`GET /v1/core/scorecards/instances`**](/api-references/get-scorecard-instances). **When to use which:** * **`evaluated-instances/{id}`** — you want a **configured scorecard report** (with weighted sections, pass/fail colors, AI commentary) over a slice of data. * **`scorecard-metrics/values`** with `filterBy=RECORDING` — you just need **raw metrics for one recording id**, no saved scorecard configuration applied. # Support Source: https://docs.siro.ai/support How to get help with the Siro API For help, feedback, or suggestions, reach out to `support@siro.ai` # Deep Links Source: https://docs.siro.ai/triggering-recordings/deep-links Triggering recordings from your app ## Overview Sales is hard. Empower your sales team by giving them an automatic recording experience. The [Siro](https://siro.ai) app accepts deep links to start and stop recordings and then redirects you back to your app. This lets you create an experience for sales reps that starts and ends recordings nearly automatically. ### Best Practices **Good 👍:** Sales reps don't need to change their current behavior, but suddenly all of their conversations are recorded for them. The experience feels magical. **Bad 👎:** Making your sales reps tap an extra button to start and stop recordings. This is a tedious experience that feels like more work. Worst of all, reps will sometimes forget to record and lose critical conversation intelligence. ### Link Behavior * If a recording is already in progress, it will not be interrupted * Deep links will skip all post-recording debrief screens