Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,18 @@
{
"extends": ["../../../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-teamleader
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build pieces-teamleader` to build the library.

View File

@@ -0,0 +1,10 @@
{
"name": "@activepieces/piece-teamleader",
"version": "0.0.9",
"type": "commonjs",
"main": "./src/index.js",
"types": "./src/index.d.ts",
"dependencies": {
"tslib": "^2.3.0"
}
}

View File

@@ -0,0 +1,65 @@
{
"name": "pieces-teamleader",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/teamleader/src",
"projectType": "library",
"release": {
"version": {
"manifestRootsToUpdate": [
"dist/{projectRoot}"
],
"currentVersionResolver": "git-tag",
"fallbackCurrentVersionResolver": "disk"
}
},
"tags": [],
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/teamleader",
"tsConfig": "packages/pieces/community/teamleader/tsconfig.lib.json",
"packageJson": "packages/pieces/community/teamleader/package.json",
"main": "packages/pieces/community/teamleader/src/index.ts",
"assets": [
"packages/pieces/community/teamleader/*.md",
{
"input": "packages/pieces/community/teamleader/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"^build",
"prebuild"
]
},
"nx-release-publish": {
"options": {
"packageRoot": "dist/{projectRoot}"
}
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/teamleader",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
}
}

View File

@@ -0,0 +1,261 @@
{
"\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ": "\n Um Ihre OAuth2-Zugangsdaten zu erhalten:\n \n 1. Gehe zum Teamleader Marketplace (https://marketplace. eamleader.eu)\n 2. Melden Sie sich an oder erstellen Sie ein Konto\n 3. Gehen Sie zu \"Erstellen\" und klicken Sie auf \"Neue Integration erstellen\"\n 4. Füllen Sie die benötigten Informationen\n aus. Auf der Einstellungsseite deiner Integration, konfigurieren:\n - Füge `https://cloud.activepieces hinzu. om/redirect` zu den erlaubten Umleitungs-URIs\n - Wählen Sie alle benötigten Bereiche für Ihre Integration\n 6. Client-ID und Client-Geheimnis\n kopieren ",
"Create Contact": "Kontakt erstellen",
"Update Contact": "Kontakt aktualisieren",
"Create Company": "Firma erstellen",
"Update Company": "Firma aktualisieren",
"Link Contact to Company": "Kontakt zur Firma verknüpfen",
"Unlink Contact from Company": "Kontakt von der Firma entfernen",
"Create Deal": "Deal erstellen",
"Update Deal": "Angebot aktualisieren",
"Search Companies": "Unternehmen suchen",
"Search Contacts": "Kontakte suchen",
"Search Deals": "Angebote suchen",
"Search Invoices": "Rechnungen suchen",
"Custom API Call": "Eigener API-Aufruf",
"Create a new contact record": "Neuen Kontakt-Eintrag erstellen",
"Modify existing contact data": "Vorhandene Kontaktdaten ändern",
"Add a new company record": "Neuen Firmeneintrag hinzufügen",
"Modify company information": "Unternehmensinformationen ändern",
"Associate a contact with a company": "Verbinden Sie einen Kontakt mit einem Unternehmen",
"Remove the association between contact and company": "Verbindung zwischen Kontakt und Unternehmen entfernen",
"Create a new deal/opportunity": "Neue Deal/Verkaufs-Chance erstellen",
"Modify deal properties": "Deal-Eigenschaften ändern",
"List or filter companies": "Unternehmen auflisten oder filtern",
"List or filter contacts": "Kontakte auflisten oder filtern",
"List or filter deals": "Angebote auflisten oder filtern",
"List or filter invoices": "Rechnungen auflisten oder filtern",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"First Name": "Vorname",
"Last Name": "Nachname",
"Salutation": "Anrede",
"Emails": "E-Mails",
"Phone Numbers": "Telefonnummern",
"Website": "Webseite",
"Addresses": "Adressen",
"Language": "Sprache",
"Gender": "Geschlecht",
"Birth Date": "Geburtsdatum",
"IBAN": "IBAN",
"BIC": "BIC",
"National ID Number": "Nationale ID-Nummer",
"Remarks": "Anmerkungen",
"Tags": "Tags",
"Custom Fields": "Eigene Felder",
"Marketing Consent": "Marketing-Zustimmung",
"Contact": "Kontakt",
"Company Name": "Firmenname",
"Country Code": "Landesvorwahl",
"Business Type": "Geschäftstyp",
"VAT Number": "USt-IdNr.",
"Responsible User ID": "Verantwortliche Benutzer-ID",
"Preferred Currency": "Bevorzugte Währung",
"Company": "Firma",
"Position": "Position",
"Decision Maker": "Entscheider",
"Deal Title": "Angebotstitel",
"Customer Type": "Kundentyp",
"Customer": "Kunde",
"Contact Person": "Ansprechpartner",
"Summary": "Summary",
"Source": "Quelle",
"Department": "Abteilung",
"Responsible User": "Verantwortlicher Benutzer",
"Phase": "Phase",
"Estimated Value": "Geschätzter Wert",
"Value Currency": "Wertwährung",
"Estimated Probability": "Geschätzte Wahrscheinlichkeit",
"Estimated Closing Date": "Geschätztes Abschlussdatum",
"Deal": "Deal",
"Search Term": "Suchbegriff",
"Email": "E-Mail",
"Status": "Status",
"Updated Since": "Aktualisiert seit",
"Sort Field": "Sortierfeld",
"Sort Order": "Sortierung",
"Results Per Page": "Ergebnisse pro Seite",
"Page Number": "Seitennummer",
"Include Custom Fields": "Benutzerdefinierte Felder einbeziehen",
"Deal Phase": "Angebotsphase",
"Exact Closing Date": "Genaues Abschlussdatum",
"Closing Date From": "Abschlussdatum von",
"Closing Date Until": "Enddatum bis",
"Created Before": "Erstellt vor",
"Invoice Number": "Rechnungsnummer",
"Project": "Projekt",
"Subscription": "Abonnements",
"Purchase Order Number": "Bestellnummer",
"Payment Reference": "Zahlungsreferenz",
"Invoice Date After": "Rechnungsdatum nach",
"Invoice Date Before": "Rechnungsdatum vor",
"Include Late Fee Information": "Späte Gebühreninformationen einbeziehen",
"Method": "Methode",
"Headers": "Kopfzeilen",
"Query Parameters": "Abfrageparameter",
"Body": "Körper",
"Response is Binary ?": "Antwort ist binär?",
"No Error on Failure": "Kein Fehler bei Fehler",
"Timeout (in seconds)": "Timeout (in Sekunden)",
"First name of the contact": "Vorname des Kontakts",
"Last name of the contact": "Nachname des Kontakts",
"Salutation (e.g., Mr, Mrs, Dr)": "Anrede (z. B. Mr, Mrs, Dr)",
"Email addresses for the contact": "E-Mail-Adressen für den Kontakt",
"Phone numbers for the contact": "Telefonnummern für den Kontakt",
"Website URL": "Website-URL",
"Contact addresses": "Kontaktadressen",
"Language code (e.g., en, nl, fr)": "Sprachcode (z. B. en, nl, fr)",
"Gender of the contact": "Geschlecht des Kontakts",
"Birth date (YYYY-MM-DD format)": "Geburtsdatum (Format JJJJJ-MM-TT)",
"International Bank Account Number": "Internationale Kontonummer",
"Bank Identifier Code": "Bankleitzahl",
"National identification number": "Nationale Identifikationsnummer",
"Additional notes (supports Markdown)": "Zusätzliche Notizen (unterstützt Markdown)",
"Contact tags": "Kontakt-Tags",
"Custom field values": "Benutzerdefinierte Feldwerte",
"Allow marketing emails": "Marketing-E-Mails erlauben",
"Select the contact to update": "Kontakt zum Update auswählen",
"Email addresses (replaces all existing emails)": "E-Mail-Adressen (ersetzt alle vorhandenen E-Mails)",
"Phone numbers (replaces all existing numbers)": "Telefonnummern (ersetzt alle vorhandenen Zahlen)",
"Contact addresses (replaces all existing addresses)": "Kontaktadressen (ersetzt alle vorhandenen Adressen)",
"Contact tags (replaces all existing tags)": "Kontakt-Tags (ersetzt alle vorhandenen Tags)",
"Name of the company": "Name der Firma",
"Two-letter country code (e.g., BE, NL, US) for business type selection": "Ländercode mit zwei Buchstaben (z. B. BE, NL, US) für die Auswahl von Geschäftstypen",
"Legal structure of the company": "Rechtliche Struktur des Unternehmens",
"VAT/tax identification number": "Umsatzsteuer-Identifikationsnummer",
"Email addresses for the company": "E-Mail-Adressen für das Unternehmen",
"Phone numbers for the company": "Telefonnummern für die Firma",
"Company website URL": "Firmen-Website-URL",
"Company addresses": "Firmenadressen",
"ID of the user responsible for this company": "ID des Benutzers, der für dieses Unternehmen verantwortlich ist",
"Company tags": "Firmen-Tags",
"Preferred currency for this company": "Bevorzugte Währung für dieses Unternehmen",
"Select the company to update": "Wählen Sie die zu aktualisierende Firma",
"Company addresses (replaces all existing addresses)": "Firmenadressen (ersetzt alle vorhandenen Adressen)",
"Company tags (replaces all existing tags)": "Firmen-Tags (ersetzt alle vorhandenen Tags)",
"Select the contact to link": "Kontakt zum Link auswählen",
"Select the company to link to": "Wählen Sie die Firma, auf die verwiesen werden soll",
"Job title or role (e.g., CEO, Manager)": "Job Titel oder Rolle (z. B. CEO, Manager)",
"Is this contact a decision maker?": "Ist dieser Kontakt ein Entscheidungsträger?",
"Select the contact to unlink": "Kontakt zum Aufheben auswählen",
"Select the company to unlink from": "Wählen Sie die zu entfernende Firma aus",
"Title of the deal": "Titel des Deals",
"Type of customer for this deal": "Kundenart für diesen Deal",
"Select the customer (company or contact)": "Kunden auswählen (Firma oder Kontakt)",
"Contact person for this deal (for company customers)": "Ansprechpartner für dieses Angebot (für Firmenkunden)",
"Additional information about the deal": "Zusätzliche Informationen über das Angebot",
"How the lead was acquired": "Wie der Lead erworben wurde",
"Department responsible for this deal": "Abteilung verantwortlich für diesen Deal",
"User responsible for this deal": "Benutzer, der für diesen Deal verantwortlich ist",
"Deal phase or stage": "Deal-Phase oder Stufe",
"Deal value amount": "Deal-Wert Betrag",
"Currency for the estimated value": "Währung für den geschätzten Wert",
"Win probability (0-1, e.g., 0.75 for 75%)": "Gewinnwahrscheinlichkeit (0-1, z.B., 0,75 für 75%)",
"Expected deal closing date": "Erwartetes Abschlussdatum",
"Select the deal to update": "Deal zum Aktualisieren auswählen",
"Search by name, VAT number, emails or telephones": "Suche nach Name, USt-Nummer, E-Mails oder Telefonen",
"Filter by email address": "Nach E-Mail-Adresse filtern",
"Filter by VAT number": "Nach USt-IdNr. filtern",
"Filter by company status": "Nach Firmenstatus filtern",
"Filter by tag names (comma-separated)": "Nach Tagnamen filtern (kommasepariert)",
"Only companies updated after this date": "Nur Unternehmen nach diesem Datum aktualisiert",
"Field to sort by": "Sortierfeld",
"Sort direction": "Sortierrichtung",
"Number of results per page (default: 20)": "Anzahl der Ergebnisse pro Seite (Standard: 20)",
"Page number to retrieve (default: 1)": "Seitenzahl abzurufen (Standard: 1)",
"Include custom field data in results": "Benutzerdefinierte Felddaten in Ergebnisse einbeziehen",
"Search by first name, last name, email or telephone": "Suche nach Vorname, Nachname, E-Mail oder Telefon",
"Filter contacts by company": "Kontakte nach Unternehmen filtern",
"Filter by contact status": "Nach Kontaktstatus filtern",
"Only contacts updated after this date": "Nur Kontakte nach diesem Datum aktualisiert",
"Search by title, reference or customer name": "Suche nach Titel, Referenz- oder Kundenname",
"Type of customer to filter by": "Kundentyp zum filtern",
"Filter deals by specific customer": "Angebote nach Kunden filtern",
"Filter by deal phase or stage": "Filtern nach Deal-Phase oder Stufe",
"Filter by deal status (multiple selection)": "Nach Deal-Status filtern (Mehrfachauswahl)",
"Filter by user responsible for deals": "Filtern nach Benutzer, der für Angebote verantwortlich ist",
"Filter by specific estimated closing date": "Filtern nach spezifischem Enddatum",
"Filter deals closing after this date (inclusive)": "Nach diesem Datum schließende Angebote filtern (inklusive)",
"Filter deals closing before this date (inclusive)": "Abschließende Geschäfte vor diesem Datum filtern (inklusive)",
"Only deals updated after this date (inclusive)": "Nur Angebote aktualisiert nach diesem Datum (inklusive)",
"Only deals created before this date (inclusive)": "Nur Angebote, die vor diesem Datum erstellt wurden (inklusiv)",
"Search by invoice number, purchase order number, payment reference or customer name": "Suche nach Rechnungsnummer, Bestellnummer, Zahlungsnummer oder Kundenname",
"Filter by full invoice number (e.g., \"2017 / 5\")": "Filtern nach voller Rechnungsnummer (z.B. \"2017 / 5\")",
"Filter invoices by specific customer": "Rechnungen nach bestimmten Kunden filtern",
"Filter by department (company entity)": "Nach Abteilung filtern (Firma)",
"Filter by associated deal": "Filtern nach zugehörigem Deal",
"Filter by associated project": "Nach zugehörigem Projekt filtern",
"Filter by associated subscription": "Filtern nach zugehörigem Abonnement",
"Filter by invoice status (multiple selection)": "Filtern nach Rechnungsstatus (Mehrfachauswahl)",
"Filter by purchase order number": "Nach Bestellnummer filtern",
"Filter by payment reference": "Nach Zahlungsnummer filtern",
"Filter invoices with date after this date (inclusive)": "Filter Rechnungen mit Datum nach diesem Datum (inklusive)",
"Filter invoices with date before this date (inclusive)": "Rechnungen mit Datum vor diesem Datum filtern (inklusive)",
"Only invoices updated after this date": "Nur Rechnungen nach diesem Datum aktualisiert",
"Include late fee and interest calculations in response": "Späte Gebühren und Zinsberechnungen in Antwort einbeziehen",
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
"Female": "Weiblich",
"Male": "Mann",
"Non-binary": "Nicht-Binärdatei",
"Prefers not to say": "Bevorzugt nicht zu sagen",
"Unknown": "Unbekannt",
"Euro (EUR)": "Euro (EUR)",
"US Dollar (USD)": "US Dollar (USD)",
"British Pound (GBP)": "Britisches Pfund (GBP)",
"Canadian Dollar (CAD)": "Kanadischer Dollar (CAD)",
"Swiss Franc (CHF)": "Schweizer Franken (CHF)",
"Danish Krone (DKK)": "Danish Krone (DKK)",
"Norwegian Krone (NOK)": "Norwegische Krone (NOK)",
"Swedish Krona (SEK)": "Schwedische Kronen (SEK)",
"Japanese Yen (JPY)": "Japanischer Yen (JPY)",
"Chinese Yuan (CNY)": "Chinesischer Yuan (CNY)",
"Czech Koruna (CZK)": "Tschechische Koruna (CZK)",
"Polish Zloty (PLN)": "Polnischer Zloty (PLN)",
"Romanian Leu (RON)": "Rumänischer Leu (RON)",
"Turkish Lira (TRY)": "Türkische Lira (TRY)",
"South African Rand (ZAR)": "Südafrikanischer Rand (ZAR)",
"Indian Rupee (INR)": "Indische Rupie (INR)",
"Mexican Peso (MXN)": "Mexican Peso (MXN)",
"Chilean Peso (CLP)": "Chilean Peso (CLP)",
"Colombian Peso (COP)": "Kolumbianischer Peso (COP)",
"Peruvian Sol (PEN)": "Peruanischer Sol (PEN)",
"Moroccan Dirham (MAD)": "Marokkanischer Dirham (MAD)",
"Icelandic Krona (ISK)": "Icelandic Krona (ISK)",
"Bosnia and Herzegovina Mark (BAM)": "Bosnien und Herzegowina Zeichen (BAM)",
"Active": "Aktiv",
"Deactivated": "Deaktiviert",
"Name": "Name",
"Date Added": "Hinzugefügt am",
"Date Updated": "Datum aktualisiert",
"Ascending (A-Z, Oldest First)": "Aufsteigend (A-Z, Älteste erst)",
"Descending (Z-A, Newest First)": "Absteigend (Z-A, Neueste Erste)",
"Open": "Öffnen",
"Won": "Gewonnen",
"Lost": "Verlorene",
"Created Date": "Erstellungsdatum",
"Weighted Value": "Gewichteter Wert",
"Ascending (Oldest First, Lowest Value)": "Aufsteigend (Älteste Erste, niedrigster Wert)",
"Descending (Newest First, Highest Value)": "Absteigend (Neueste Erste, Höchster Wert)",
"Draft": "Entwurf",
"Outstanding": "Ausstehend",
"Matched": "Passend",
"Invoice Date": "Rechnungsdatum",
"Ascending": "Aufsteigend",
"Descending": "Absteigend",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD",
"New Contact": "Neuer Kontakt",
"New Company": "Neue Firma",
"New Deal": "Neuer Deal",
"Deal Won": "Deal Sieger",
"New Invoice": "Neue Rechnung",
"Triggers when a new contact is created": "Wird ausgelöst, wenn ein neuer Kontakt erstellt wird",
"Triggers when a new company is created": "Wird ausgelöst, wenn ein neues Unternehmen erstellt wird",
"Triggers when a new deal is created": "Wird ausgelöst, wenn ein neues Deal erstellt wird",
"Triggers when a deal is won/accepted": "Wird ausgelöst, wenn ein Deal gewonnen oder akzeptiert wird",
"Triggers when a new invoice is drafted": "Wird ausgelöst, wenn eine neue Rechnung erstellt wird"
}

View File

@@ -0,0 +1,261 @@
{
"\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ": "\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ",
"Create Contact": "Crear contacto",
"Update Contact": "Actualizar contacto",
"Create Company": "Crear empresa",
"Update Company": "Actualizar Compañía",
"Link Contact to Company": "Vincular contacto a la empresa",
"Unlink Contact from Company": "Desvincular contacto de la compañía",
"Create Deal": "Crear oferta",
"Update Deal": "Actualizar oferta",
"Search Companies": "Buscar empresas",
"Search Contacts": "Buscar contactos",
"Search Deals": "Buscar ofertas",
"Search Invoices": "Buscar facturas",
"Custom API Call": "Llamada API personalizada",
"Create a new contact record": "Crear un nuevo registro de contacto",
"Modify existing contact data": "Modificar datos de contacto existentes",
"Add a new company record": "Añadir un nuevo registro de empresa",
"Modify company information": "Modificar la información de la empresa",
"Associate a contact with a company": "Asociar un contacto con una empresa",
"Remove the association between contact and company": "Eliminar la asociación entre contacto y empresa",
"Create a new deal/opportunity": "Crear una nueva oferta/oportunidad",
"Modify deal properties": "Modificar propiedades de la oferta",
"List or filter companies": "Listar o filtrar empresas",
"List or filter contacts": "Listar o filtrar contactos",
"List or filter deals": "Ofertas de lista o filtro",
"List or filter invoices": "Listar o filtrar facturas",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"First Name": "Nombre",
"Last Name": "Apellido",
"Salutation": "Salución",
"Emails": "Correos",
"Phone Numbers": "Números de teléfono",
"Website": "Sitio web",
"Addresses": "Direcciones",
"Language": "Idioma",
"Gender": "Sexo",
"Birth Date": "Fecha de nacimiento",
"IBAN": "IBAN",
"BIC": "BIC",
"National ID Number": "Número de ID nacional",
"Remarks": "Comentarios",
"Tags": "Etiquetas",
"Custom Fields": "Campos personalizados",
"Marketing Consent": "Consenso de marketing",
"Contact": "Contacto",
"Company Name": "Nombre De La Empresa",
"Country Code": "Código del país",
"Business Type": "Tipo de negocio",
"VAT Number": "Número de IVA",
"Responsible User ID": "ID de usuario responsable",
"Preferred Currency": "Moneda preferida",
"Company": "Empresa",
"Position": "Posición",
"Decision Maker": "Tomador de decisión",
"Deal Title": "Título de la oferta",
"Customer Type": "Tipo de cliente",
"Customer": "Cliente",
"Contact Person": "Persona de contacto",
"Summary": "Summary",
"Source": "Fuente",
"Department": "Departamento",
"Responsible User": "Usuario responsable",
"Phase": "Fase",
"Estimated Value": "Valor estimado",
"Value Currency": "Valor de la moneda",
"Estimated Probability": "Probabilidad estimada",
"Estimated Closing Date": "Fecha estimada de cierre",
"Deal": "Oferta",
"Search Term": "Buscar término",
"Email": "E-mail",
"Status": "Estado",
"Updated Since": "Actualizado desde",
"Sort Field": "Ordenar campo",
"Sort Order": "Ordenar",
"Results Per Page": "Resultados por página",
"Page Number": "Número de página",
"Include Custom Fields": "Incluye campos personalizados",
"Deal Phase": "Fase de oferta",
"Exact Closing Date": "Fecha exacta de cierre",
"Closing Date From": "Fecha de cierre de",
"Closing Date Until": "Fecha de cierre hasta",
"Created Before": "Creado antes",
"Invoice Number": "Número de factura",
"Project": "Projekt",
"Subscription": "Subscripción",
"Purchase Order Number": "Número de orden de compra",
"Payment Reference": "Referencia de pago",
"Invoice Date After": "Fecha de la factura después",
"Invoice Date Before": "Fecha de la factura antes",
"Include Late Fee Information": "Incluye información sobre la tarifa atrasada",
"Method": "Método",
"Headers": "Encabezados",
"Query Parameters": "Parámetros de consulta",
"Body": "Cuerpo",
"Response is Binary ?": "¿Respuesta es binaria?",
"No Error on Failure": "No hay ningún error en fallo",
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
"First name of the contact": "Nombre del contacto",
"Last name of the contact": "Apellido del contacto",
"Salutation (e.g., Mr, Mrs, Dr)": "Salución (p.ej.: As, Drá)",
"Email addresses for the contact": "Direcciones de correo electrónico para el contacto",
"Phone numbers for the contact": "Números de teléfono del contacto",
"Website URL": "URL del sitio web",
"Contact addresses": "Direcciones de contacto",
"Language code (e.g., en, nl, fr)": "Código de idioma (por ej., es, nl, fr)",
"Gender of the contact": "Género del contacto",
"Birth date (YYYY-MM-DD format)": "Fecha de nacimiento (formato AAA-MM-DD)",
"International Bank Account Number": "Número de cuenta bancaria internacional",
"Bank Identifier Code": "Código del identificador bancario",
"National identification number": "Número de identificación nacional",
"Additional notes (supports Markdown)": "Notas adicionales (soporta Markdown)",
"Contact tags": "Etiquetas de contacto",
"Custom field values": "Valores de campos personalizados",
"Allow marketing emails": "Permitir correos electrónicos de marketing",
"Select the contact to update": "Seleccione el contacto a actualizar",
"Email addresses (replaces all existing emails)": "Direcciones de correo electrónico (reemplaza todos los correos existentes)",
"Phone numbers (replaces all existing numbers)": "Números de teléfono (sustituye todos los números existentes)",
"Contact addresses (replaces all existing addresses)": "Direcciones de contacto (reemplaza todas las direcciones existentes)",
"Contact tags (replaces all existing tags)": "Etiquetas de contacto (reemplaza todas las etiquetas existentes)",
"Name of the company": "Nombre de la empresa",
"Two-letter country code (e.g., BE, NL, US) for business type selection": "Código de país de dos letras (por ej., BE, NL, EE.UU.) para la selección de tipo de negocio",
"Legal structure of the company": "Estructura legal de la empresa",
"VAT/tax identification number": "Número de identificación de IVA/impuesto",
"Email addresses for the company": "Direcciones de correo electrónico de la empresa",
"Phone numbers for the company": "Números de teléfono para la empresa",
"Company website URL": "URL del sitio web de la empresa",
"Company addresses": "Direcciones de la empresa",
"ID of the user responsible for this company": "ID del usuario responsable de esta empresa",
"Company tags": "Etiquetas de empresa",
"Preferred currency for this company": "Moneda preferida para esta empresa",
"Select the company to update": "Seleccione la empresa a actualizar",
"Company addresses (replaces all existing addresses)": "Direcciones de la empresa (reemplaza todas las direcciones existentes)",
"Company tags (replaces all existing tags)": "Etiquetas de empresa (reemplaza todas las etiquetas existentes)",
"Select the contact to link": "Seleccione el contacto para vincular",
"Select the company to link to": "Seleccione la empresa a la que enlazar",
"Job title or role (e.g., CEO, Manager)": "Título o rol de trabajo (ej., CEO, Manager)",
"Is this contact a decision maker?": "¿Es este contacto un tomador de decisiones?",
"Select the contact to unlink": "Seleccione el contacto para desvincular",
"Select the company to unlink from": "Seleccione la empresa desde la que desvincular",
"Title of the deal": "Título de la oferta",
"Type of customer for this deal": "Tipo de cliente para esta oferta",
"Select the customer (company or contact)": "Seleccione el cliente (empresa o contacto)",
"Contact person for this deal (for company customers)": "Persona de contacto para esta oferta (para clientes de la empresa)",
"Additional information about the deal": "Información adicional sobre la oferta",
"How the lead was acquired": "Cómo se adquirió el plomo",
"Department responsible for this deal": "Departamento responsable de este trato",
"User responsible for this deal": "Usuario responsable de esta oferta",
"Deal phase or stage": "Deal fase o etapa",
"Deal value amount": "Valor de la oferta",
"Currency for the estimated value": "Moneda para el valor estimado",
"Win probability (0-1, e.g., 0.75 for 75%)": "Probabilidad de ganar (0-1, p. ej., 0,75 por 75%)",
"Expected deal closing date": "Fecha de cierre esperada",
"Select the deal to update": "Seleccione la oferta a actualizar",
"Search by name, VAT number, emails or telephones": "Buscar por nombre, número de IVA, correos electrónicos o teléfonos",
"Filter by email address": "Filtrar por dirección de email",
"Filter by VAT number": "Filtrar por número de IVA",
"Filter by company status": "Filtrar por estado de la empresa",
"Filter by tag names (comma-separated)": "Filtrar por nombres de etiquetas (separados por comas)",
"Only companies updated after this date": "Sólo empresas actualizadas después de esta fecha",
"Field to sort by": "Campo por el que ordenar",
"Sort direction": "Ordenar dirección",
"Number of results per page (default: 20)": "Número de resultados por página (por defecto: 20)",
"Page number to retrieve (default: 1)": "Número de página a recuperar (por defecto: 1)",
"Include custom field data in results": "Incluye datos de campo personalizado en los resultados",
"Search by first name, last name, email or telephone": "Buscar por nombre, apellido, email o teléfono",
"Filter contacts by company": "Filtrar contactos por empresa",
"Filter by contact status": "Filtrar por estado de contacto",
"Only contacts updated after this date": "Sólo contactos actualizados después de esta fecha",
"Search by title, reference or customer name": "Buscar por título, referencia o nombre del cliente",
"Type of customer to filter by": "Tipo de cliente a filtrar por",
"Filter deals by specific customer": "Filtrar ofertas por cliente específico",
"Filter by deal phase or stage": "Filtrar por fase de transacción o etapa",
"Filter by deal status (multiple selection)": "Filtrar por estado de transacción (selección múltiple)",
"Filter by user responsible for deals": "Filtrar por usuario responsable de las transacciones",
"Filter by specific estimated closing date": "Filtrar por fecha de cierre estimada específica",
"Filter deals closing after this date (inclusive)": "Filtrar ofertas cerradas después de esta fecha (inclusive)",
"Filter deals closing before this date (inclusive)": "Filtrar operaciones de cierre antes de esta fecha (inclusive)",
"Only deals updated after this date (inclusive)": "Sólo ofertas actualizadas después de esta fecha (inclusive)",
"Only deals created before this date (inclusive)": "Sólo ofertas creadas antes de esta fecha (inclusive)",
"Search by invoice number, purchase order number, payment reference or customer name": "Buscar por número de factura, número de pedido de compra, referencia de pago o nombre del cliente",
"Filter by full invoice number (e.g., \"2017 / 5\")": "Filtrar por número completo de factura (por ej., \"2017 / 5\")",
"Filter invoices by specific customer": "Filtrar facturas por un cliente específico",
"Filter by department (company entity)": "Filtrar por departamento (entidad de la empresa)",
"Filter by associated deal": "Filtrar por operación asociada",
"Filter by associated project": "Filtrar por proyecto asociado",
"Filter by associated subscription": "Filtrar por suscripción asociada",
"Filter by invoice status (multiple selection)": "Filtrar por estado de factura (selección múltiple)",
"Filter by purchase order number": "Filtrar por número de orden de compra",
"Filter by payment reference": "Filtrar por referencia de pago",
"Filter invoices with date after this date (inclusive)": "Filtrar facturas con fecha posterior a esta fecha (inclusive)",
"Filter invoices with date before this date (inclusive)": "Filtrar facturas con fecha anterior a esta fecha (inclusive)",
"Only invoices updated after this date": "Sólo facturas actualizadas después de esta fecha",
"Include late fee and interest calculations in response": "Incluye cargos tardíos y cálculos de intereses en respuesta",
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
"Female": "Mujer",
"Male": "Hombre",
"Non-binary": "No binario",
"Prefers not to say": "Prefiere no decir",
"Unknown": "Desconocido",
"Euro (EUR)": "Euro (EUR)",
"US Dollar (USD)": "Dólar US (USD)",
"British Pound (GBP)": "Libra Británica (GBP)",
"Canadian Dollar (CAD)": "Dólar canadiense (CAD)",
"Swiss Franc (CHF)": "Franco suizo (CHF)",
"Danish Krone (DKK)": "Danish Krone (DKK)",
"Norwegian Krone (NOK)": "Corona noruega (NOK)",
"Swedish Krona (SEK)": "Corona sueca (SEK)",
"Japanese Yen (JPY)": "Yen japonés (JPY)",
"Chinese Yuan (CNY)": "Yuan chino (CNY)",
"Czech Koruna (CZK)": "Corona Checa (CZK)",
"Polish Zloty (PLN)": "Zloty polaco (PLN)",
"Romanian Leu (RON)": "Leu Rumano (RON)",
"Turkish Lira (TRY)": "Lira Turca (TRY)",
"South African Rand (ZAR)": "Rand sudafricano (ZAR)",
"Indian Rupee (INR)": "Rupía india (INR)",
"Mexican Peso (MXN)": "Mexican Peso (MXN)",
"Chilean Peso (CLP)": "Chilean Peso (CLP)",
"Colombian Peso (COP)": "Peso colombiano (COP)",
"Peruvian Sol (PEN)": "Sol peruano (PEN)",
"Moroccan Dirham (MAD)": "Dirham marroquí (MAD)",
"Icelandic Krona (ISK)": "Icelandic Krona (ISK)",
"Bosnia and Herzegovina Mark (BAM)": "Marca de Bosnia y Herzegovina (BAM)",
"Active": "Activo",
"Deactivated": "Desactivado",
"Name": "Nombre",
"Date Added": "Fecha añadida",
"Date Updated": "Fecha Actualizada",
"Ascending (A-Z, Oldest First)": "Ascendente (A-Z, el más antiguo primero)",
"Descending (Z-A, Newest First)": "Descendente (Z-A, el más nuevo primero)",
"Open": "Abrir",
"Won": "Ganado",
"Lost": "Perdido",
"Created Date": "Fecha de creación",
"Weighted Value": "Valor ponderado",
"Ascending (Oldest First, Lowest Value)": "Ascendente (en primer lugar, el valor más bajo)",
"Descending (Newest First, Highest Value)": "Descendente (más reciente, el valor más alto)",
"Draft": "Borrador",
"Outstanding": "Pendiente",
"Matched": "Coincidido",
"Invoice Date": "Fecha Factura",
"Ascending": "Ascendiente",
"Descending": "Descendiente",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO",
"New Contact": "Nuevo contacto",
"New Company": "Nueva empresa",
"New Deal": "Nueva oferta",
"Deal Won": "Oferta Ganada",
"New Invoice": "Nueva factura",
"Triggers when a new contact is created": "Dispara cuando se crea un nuevo contacto",
"Triggers when a new company is created": "Dispara cuando se crea una nueva empresa",
"Triggers when a new deal is created": "Dispara cuando se crea una nueva oferta",
"Triggers when a deal is won/accepted": "Dispara cuando una oferta es ganada o aceptada",
"Triggers when a new invoice is drafted": "Dispara cuando se redacta una nueva factura"
}

View File

@@ -0,0 +1,261 @@
{
"\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ": "\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ",
"Create Contact": "Créer un contact",
"Update Contact": "Mettre à jour le contact",
"Create Company": "Créer une entreprise",
"Update Company": "Mettre à jour la société",
"Link Contact to Company": "Lier le contact à la société",
"Unlink Contact from Company": "Délier le contact de la société",
"Create Deal": "Créer une transaction",
"Update Deal": "Mettre à jour la transaction",
"Search Companies": "Rechercher des entreprises",
"Search Contacts": "Rechercher dans les contacts",
"Search Deals": "Rechercher des offres",
"Search Invoices": "Rechercher des factures",
"Custom API Call": "Appel d'API personnalisé",
"Create a new contact record": "Créer un nouveau dossier de contact",
"Modify existing contact data": "Modifier les données de contact existantes",
"Add a new company record": "Ajouter un nouveau dossier d'entreprise",
"Modify company information": "Modifier les informations de l'entreprise",
"Associate a contact with a company": "Associer un contact avec une entreprise",
"Remove the association between contact and company": "Supprimer l'association entre le contact et l'entreprise",
"Create a new deal/opportunity": "Créer une nouvelle offre/opportunité",
"Modify deal properties": "Modifier les propriétés de la transaction",
"List or filter companies": "Lister ou filtrer les entreprises",
"List or filter contacts": "Lister ou filtrer les contacts",
"List or filter deals": "Lister ou filtrer les offres",
"List or filter invoices": "Lister ou filtrer les factures",
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
"First Name": "First Name",
"Last Name": "Last Name",
"Salutation": "Civilité",
"Emails": "E-mails",
"Phone Numbers": "Numéros de téléphone",
"Website": "Site Web",
"Addresses": "Adresses",
"Language": "Langue",
"Gender": "Sexe",
"Birth Date": "Date de naissance",
"IBAN": "IBAN",
"BIC": "BIC",
"National ID Number": "Numéro d'identification national",
"Remarks": "Remarques",
"Tags": "Tags",
"Custom Fields": "Champs personnalisés",
"Marketing Consent": "Consentement de marketing",
"Contact": "Contacter",
"Company Name": "Nom de lentreprise",
"Country Code": "Code du pays",
"Business Type": "Type d'entreprise",
"VAT Number": "Numéro de TVA",
"Responsible User ID": "Identifiant de l'utilisateur responsable",
"Preferred Currency": "Devise préférée",
"Company": "Entreprise",
"Position": "Position",
"Decision Maker": "Décideur",
"Deal Title": "Titre de la transaction",
"Customer Type": "Type de client",
"Customer": "Client",
"Contact Person": "Personne de contact",
"Summary": "Résumé",
"Source": "Source",
"Department": "Service",
"Responsible User": "Utilisateur Responsable",
"Phase": "Etape",
"Estimated Value": "Valeur estimée",
"Value Currency": "Devise de la valeur",
"Estimated Probability": "Probabilité estimée",
"Estimated Closing Date": "Date de clôture estimée",
"Deal": "Affaire",
"Search Term": "Terme de recherche",
"Email": "Courriel",
"Status": "Statut",
"Updated Since": "Mis à jour depuis",
"Sort Field": "Champ de tri",
"Sort Order": "Ordre de tri",
"Results Per Page": "Résultats par page",
"Page Number": "Numéro de page",
"Include Custom Fields": "Inclure les champs personnalisés",
"Deal Phase": "Phase de transaction",
"Exact Closing Date": "Date de clôture exacte",
"Closing Date From": "Date de clôture à partir de",
"Closing Date Until": "Date de clôture jusqu'au",
"Created Before": "Créé avant",
"Invoice Number": "Numéro de facture",
"Project": "Projet",
"Subscription": "Abonnement",
"Purchase Order Number": "Numéro de bon de commande",
"Payment Reference": "Référence de paiement",
"Invoice Date After": "Date de la facture après",
"Invoice Date Before": "Date d'avant la facture",
"Include Late Fee Information": "Inclure les informations sur les frais de retard",
"Method": "Méthode",
"Headers": "En-têtes",
"Query Parameters": "Paramètres de requête",
"Body": "Corps",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'expiration (en secondes)",
"First name of the contact": "Prénom du contact",
"Last name of the contact": "Nom du contact",
"Salutation (e.g., Mr, Mrs, Dr)": "Salutation (ex: M.M., M., M., Dr)",
"Email addresses for the contact": "Adresses e-mail pour le contact",
"Phone numbers for the contact": "Numéros de téléphone pour le contact",
"Website URL": "URL du site web",
"Contact addresses": "Adresses du contact",
"Language code (e.g., en, nl, fr)": "Code de langue (par exemple, en, nl, fr)",
"Gender of the contact": "Sexe du contact",
"Birth date (YYYY-MM-DD format)": "Date de naissance (format AAAA-MM-JJ)",
"International Bank Account Number": "Numéro de compte bancaire international",
"Bank Identifier Code": "Code d'identification de la banque",
"National identification number": "Numéro d'identification national",
"Additional notes (supports Markdown)": "Notes supplémentaires (prend en charge Markdown)",
"Contact tags": "Étiquettes de contact",
"Custom field values": "Valeurs du champ personnalisé",
"Allow marketing emails": "Autoriser les e-mails de marketing",
"Select the contact to update": "Sélectionnez le contact à mettre à jour",
"Email addresses (replaces all existing emails)": "Adresses e-mail (remplace tous les emails existants)",
"Phone numbers (replaces all existing numbers)": "Numéros de téléphone (remplace tous les numéros existants)",
"Contact addresses (replaces all existing addresses)": "Adresses du contact (remplace toutes les adresses existantes)",
"Contact tags (replaces all existing tags)": "Tags de contact (remplace tous les tags existants)",
"Name of the company": "Nom de la société",
"Two-letter country code (e.g., BE, NL, US) for business type selection": "Code pays à deux lettres (par exemple, BE, NL, US) pour la sélection du type d'entreprise",
"Legal structure of the company": "Structure juridique de l'entreprise",
"VAT/tax identification number": "Numéro d'identification TVA/Taxe",
"Email addresses for the company": "Adresses e-mail pour la société",
"Phone numbers for the company": "Numéros de téléphone pour l'entreprise",
"Company website URL": "URL du site web de l'entreprise",
"Company addresses": "Adresses de l'entreprise",
"ID of the user responsible for this company": "ID de l'utilisateur responsable de cette entreprise",
"Company tags": "Tags de la société",
"Preferred currency for this company": "Devise préférée pour cette entreprise",
"Select the company to update": "Sélectionnez la société à mettre à jour",
"Company addresses (replaces all existing addresses)": "Adresses de l'entreprise (remplace toutes les adresses existantes)",
"Company tags (replaces all existing tags)": "Étiquettes d'entreprise (remplace tous les tags existants)",
"Select the contact to link": "Sélectionnez le contact à lier",
"Select the company to link to": "Sélectionnez la société vers laquelle lier",
"Job title or role (e.g., CEO, Manager)": "Titre du poste ou rôle (par exemple, PDG, gestionnaire)",
"Is this contact a decision maker?": "Ce contact est-il un décideur?",
"Select the contact to unlink": "Sélectionnez le contact à dissocier",
"Select the company to unlink from": "Sélectionnez la société à partir de laquelle vous souhaitez dissocier",
"Title of the deal": "Titre de l'offre",
"Type of customer for this deal": "Type de client pour cette transaction",
"Select the customer (company or contact)": "Sélectionnez le client (entreprise ou contact)",
"Contact person for this deal (for company customers)": "Personne de contact pour cette transaction (pour les clients de l'entreprise)",
"Additional information about the deal": "Informations complémentaires sur la transaction",
"How the lead was acquired": "Comment le plomb a été acquis",
"Department responsible for this deal": "Département responsable de cette transaction",
"User responsible for this deal": "Utilisateur responsable de cette transaction",
"Deal phase or stage": "Phase ou étape de la transaction",
"Deal value amount": "Montant de la valeur de transaction",
"Currency for the estimated value": "Devise pour la valeur estimée",
"Win probability (0-1, e.g., 0.75 for 75%)": "Probabilité de gagner (0-1, ex : 0,75 pour 75%)",
"Expected deal closing date": "Date de clôture de la transaction prévue",
"Select the deal to update": "Sélectionnez la transaction à mettre à jour",
"Search by name, VAT number, emails or telephones": "Recherche par nom, numéro de TVA, e-mail ou téléphone",
"Filter by email address": "Filtrer par adresse e-mail",
"Filter by VAT number": "Filtrer par numéro de TVA",
"Filter by company status": "Filtrer par statut de société",
"Filter by tag names (comma-separated)": "Filtrer par nom de tag (séparés par des virgules)",
"Only companies updated after this date": "Seules les entreprises mises à jour après cette date",
"Field to sort by": "Champ à trier par",
"Sort direction": "Direction de tri",
"Number of results per page (default: 20)": "Nombre de résultats par page (par défaut: 20)",
"Page number to retrieve (default: 1)": "Numéro de page à récupérer (par défaut: 1)",
"Include custom field data in results": "Inclure les données des champs personnalisés dans les résultats",
"Search by first name, last name, email or telephone": "Recherche par prénom, nom de famille, email ou téléphone",
"Filter contacts by company": "Filtrer les contacts par entreprise",
"Filter by contact status": "Filtrer par statut de contact",
"Only contacts updated after this date": "Seulement les contacts mis à jour après cette date",
"Search by title, reference or customer name": "Recherche par titre, référence ou nom de client",
"Type of customer to filter by": "Type de client à filtrer par",
"Filter deals by specific customer": "Filtrer les offres par client spécifique",
"Filter by deal phase or stage": "Filtrer par phase ou étape de transaction",
"Filter by deal status (multiple selection)": "Filtrer par statut de transaction (sélection multiple)",
"Filter by user responsible for deals": "Filtrer par utilisateur responsable des offres",
"Filter by specific estimated closing date": "Filtrer par date de clôture estimée spécifique",
"Filter deals closing after this date (inclusive)": "Filtrer les transactions fermant après cette date (inclus)",
"Filter deals closing before this date (inclusive)": "Filtrer les transactions fermant avant cette date (inclus)",
"Only deals updated after this date (inclusive)": "Seulement les offres mises à jour après cette date (inclus)",
"Only deals created before this date (inclusive)": "Uniquement les offres créées avant cette date (inclus)",
"Search by invoice number, purchase order number, payment reference or customer name": "Recherche par numéro de facture, numéro de bon de commande, référence de paiement ou nom de client",
"Filter by full invoice number (e.g., \"2017 / 5\")": "Filtrer par numéro de facture complet (par exemple, \"2017 / 5\")",
"Filter invoices by specific customer": "Filtrer les factures par client spécifique",
"Filter by department (company entity)": "Filtrer par service (entité de l'entreprise)",
"Filter by associated deal": "Filtrer par transaction associée",
"Filter by associated project": "Filtrer par projet associé",
"Filter by associated subscription": "Filtrer par abonnement associé",
"Filter by invoice status (multiple selection)": "Filtrer par statut de facture (sélection multiple)",
"Filter by purchase order number": "Filtrer par numéro de bon de commande",
"Filter by payment reference": "Filtrer par référence de paiement",
"Filter invoices with date after this date (inclusive)": "Filtrer les factures avec la date postérieure à cette date (inclus)",
"Filter invoices with date before this date (inclusive)": "Filtrer les factures avec une date antérieure à cette date (inclus)",
"Only invoices updated after this date": "Seules les factures mises à jour après cette date",
"Include late fee and interest calculations in response": "Inclure le calcul des frais de retard et des intérêts dans la réponse",
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
"Female": "Femme",
"Male": "Homme",
"Non-binary": "Non binaire",
"Prefers not to say": "Préfère de ne pas dire",
"Unknown": "Unknown",
"Euro (EUR)": "Euro (EUR)",
"US Dollar (USD)": "Dollar US (USD)",
"British Pound (GBP)": "Livre sterling (GBP)",
"Canadian Dollar (CAD)": "Dollar canadien (CAD)",
"Swiss Franc (CHF)": "Franc Suisse (CHF)",
"Danish Krone (DKK)": "Danish Krone (DKK)",
"Norwegian Krone (NOK)": "Couronne norvégienne (NOK)",
"Swedish Krona (SEK)": "Couronne suédoise (SEK)",
"Japanese Yen (JPY)": "Yen japonais (JPY)",
"Chinese Yuan (CNY)": "Yuan chinois (CNY)",
"Czech Koruna (CZK)": "Couronne tchèque (CZK)",
"Polish Zloty (PLN)": "Zloty polonais (PLN)",
"Romanian Leu (RON)": "Leu Roumain (RON)",
"Turkish Lira (TRY)": "Lire turque (TRY)",
"South African Rand (ZAR)": "Rand sud-africain (ZAR)",
"Indian Rupee (INR)": "Roupie indienne (INR)",
"Mexican Peso (MXN)": "Mexican Peso (MXN)",
"Chilean Peso (CLP)": "Chilean Peso (CLP)",
"Colombian Peso (COP)": "Peso colombien (COP)",
"Peruvian Sol (PEN)": "Sol péruvien (PEN)",
"Moroccan Dirham (MAD)": "Dirham marocain (MAD)",
"Icelandic Krona (ISK)": "Icelandic Krona (ISK)",
"Bosnia and Herzegovina Mark (BAM)": "Marque de Bosnie-et-Herzégovine (BAM)",
"Active": "Actif",
"Deactivated": "Désactivé",
"Name": "Nom",
"Date Added": "Date d'ajout",
"Date Updated": "Date de mise à jour",
"Ascending (A-Z, Oldest First)": "Ascendant (A-Z, plus ancien d'abord)",
"Descending (Z-A, Newest First)": "Décroissant (Z-A, plus récent d'abord)",
"Open": "Ouvert",
"Won": "Gagné",
"Lost": "Perdu",
"Created Date": "Date de création",
"Weighted Value": "Valeur pondérée",
"Ascending (Oldest First, Lowest Value)": "Ascendant (plus ancien en premier, plus bas)",
"Descending (Newest First, Highest Value)": "Décroissant (plus récent en premier, plus grande valeur)",
"Draft": "Brouillon",
"Outstanding": "En suspens",
"Matched": "Correspondances",
"Invoice Date": "Date de la facture",
"Ascending": "Ascendant",
"Descending": "Descendant",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Contact": "Nouveau contact",
"New Company": "Nouvelle entreprise",
"New Deal": "Nouvelle offre",
"Deal Won": "Deal Gagné",
"New Invoice": "Nouvelle facture",
"Triggers when a new contact is created": "Déclenche lorsqu'un nouveau contact est créé",
"Triggers when a new company is created": "Déclenche quand une nouvelle entreprise est créée",
"Triggers when a new deal is created": "Déclenche quand une nouvelle transaction est créée",
"Triggers when a deal is won/accepted": "Déclenche quand une transaction est gagnée/acceptée",
"Triggers when a new invoice is drafted": "Déclenche quand une nouvelle facture est rédigée"
}

View File

@@ -0,0 +1,261 @@
{
"\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ": "\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ",
"Create Contact": "連絡先を作成",
"Update Contact": "連絡先を更新",
"Create Company": "所属を作成",
"Update Company": "所属を更新",
"Link Contact to Company": "会社への連絡先をリンク",
"Unlink Contact from Company": "会社から連絡先のリンクを解除",
"Create Deal": "取引を作成",
"Update Deal": "取引を更新",
"Search Companies": "企業を検索",
"Search Contacts": "連絡先を検索",
"Search Deals": "お得な情報を検索",
"Search Invoices": "請求書を検索",
"Custom API Call": "カスタムAPI通話",
"Create a new contact record": "新しい連絡先レコードを作成",
"Modify existing contact data": "既存の連絡先データを変更",
"Add a new company record": "新しい会社記録を追加",
"Modify company information": "会社情報を変更",
"Associate a contact with a company": "連絡先を会社に関連付けます",
"Remove the association between contact and company": "連絡先と会社間の関連付けを削除",
"Create a new deal/opportunity": "新しいディール/商談を作成",
"Modify deal properties": "取引のプロパティを変更",
"List or filter companies": "企業一覧またはフィルターを適用する",
"List or filter contacts": "連絡先を一覧またはフィルターする",
"List or filter deals": "取引を一覧またはフィルターする",
"List or filter invoices": "請求書の一覧またはフィルタ",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"First Name": "名",
"Last Name": "Last Name",
"Salutation": "挨拶文",
"Emails": "E-mail",
"Phone Numbers": "電話番号",
"Website": "ウェブサイト",
"Addresses": "アドレス",
"Language": "言語",
"Gender": "性別",
"Birth Date": "誕生日",
"IBAN": "IBAN",
"BIC": "BIC",
"National ID Number": "ナショナルID番号",
"Remarks": "備考",
"Tags": "タグ",
"Custom Fields": "カスタムフィールド",
"Marketing Consent": "マーケティング同意",
"Contact": "お問い合わせ",
"Company Name": "会社名",
"Country Code": "国コード",
"Business Type": "ビジネスタイプ",
"VAT Number": "VAT番号",
"Responsible User ID": "Responsible User ID",
"Preferred Currency": "優先通貨",
"Company": "会社名",
"Position": "位置",
"Decision Maker": "意思決定者",
"Deal Title": "ディールタイトル",
"Customer Type": "顧客タイプ",
"Customer": "顧客",
"Contact Person": "担当者に連絡",
"Summary": "Summary",
"Source": "ソース",
"Department": "部門",
"Responsible User": "担当ユーザー",
"Phase": "段階",
"Estimated Value": "推定値",
"Value Currency": "通貨の値",
"Estimated Probability": "推定確率",
"Estimated Closing Date": "閉店の推定日",
"Deal": "取引",
"Search Term": "検索用語",
"Email": "Eメールアドレス",
"Status": "ステータス",
"Updated Since": "更新日時",
"Sort Field": "ソートフィールド",
"Sort Order": "並び順",
"Results Per Page": "ページ毎の結果",
"Page Number": "ページ番号",
"Include Custom Fields": "カスタムフィールドを含める",
"Deal Phase": "取引段階",
"Exact Closing Date": "正確な終了日",
"Closing Date From": "終了日時",
"Closing Date Until": "終了日時",
"Created Before": "作成前",
"Invoice Number": "請求書番号",
"Project": "プロジェクト",
"Subscription": "サブスクリプション",
"Purchase Order Number": "発注番号",
"Payment Reference": "支払い参照",
"Invoice Date After": "請求日から",
"Invoice Date Before": "請求日より前",
"Include Late Fee Information": "遅延手数料情報を含める",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"First name of the contact": "連絡先の名",
"Last name of the contact": "連絡先の姓",
"Salutation (e.g., Mr, Mrs, Dr)": "挨拶文Mr、Mrs、Dr",
"Email addresses for the contact": "連絡先のメールアドレス",
"Phone numbers for the contact": "連絡先の電話番号",
"Website URL": "Website URL",
"Contact addresses": "連絡先の住所",
"Language code (e.g., en, nl, fr)": "言語コード例、en, nl, fr",
"Gender of the contact": "連絡先の性別",
"Birth date (YYYY-MM-DD format)": "生年月日(YYYY-MM-DD形式)",
"International Bank Account Number": "国際銀行口座番号",
"Bank Identifier Code": "銀行識別子コード",
"National identification number": "国民識別番号",
"Additional notes (supports Markdown)": "追加のメモ(マークダウンをサポート)",
"Contact tags": "連絡先タグ",
"Custom field values": "カスタムフィールドの値",
"Allow marketing emails": "マーケティングメールを許可する",
"Select the contact to update": "更新する連絡先を選択してください",
"Email addresses (replaces all existing emails)": "メールアドレス(すべての既存のメールアドレスを置き換えます)",
"Phone numbers (replaces all existing numbers)": "電話番号 (既存のすべての番号に置き換えられます)",
"Contact addresses (replaces all existing addresses)": "連絡先の住所(既存の住所をすべて置き換えます)",
"Contact tags (replaces all existing tags)": "連絡先タグ (既存のすべてのタグを置き換えます)",
"Name of the company": "会社名",
"Two-letter country code (e.g., BE, NL, US) for business type selection": "2文字の国コードBE、NL、US",
"Legal structure of the company": "会社の法的構造",
"VAT/tax identification number": "VAT/Tax identification number",
"Email addresses for the company": "会社のメールアドレス",
"Phone numbers for the company": "会社の電話番号",
"Company website URL": "会社ウェブサイトURL",
"Company addresses": "勤務先住所",
"ID of the user responsible for this company": "この会社に責任のあるユーザーのID",
"Company tags": "会社タグ",
"Preferred currency for this company": "この会社の優先通貨",
"Select the company to update": "更新する会社を選択してください",
"Company addresses (replaces all existing addresses)": "会社住所(既存の住所をすべて置き換えます)",
"Company tags (replaces all existing tags)": "会社タグ (既存のすべてのタグを置き換えます)",
"Select the contact to link": "リンクする連絡先を選択してください",
"Select the company to link to": "リンクする会社を選択してください",
"Job title or role (e.g., CEO, Manager)": "役職名またはロールCEO、マネージャーなど",
"Is this contact a decision maker?": "これは意思決定者との接触ですか?",
"Select the contact to unlink": "リンク解除する連絡先を選択してください",
"Select the company to unlink from": "リンクを解除する会社を選択してください",
"Title of the deal": "取引のタイトル",
"Type of customer for this deal": "この取引の顧客のタイプ",
"Select the customer (company or contact)": "顧客(会社または連絡先)を選択します",
"Contact person for this deal (for company customers)": "この取引の担当者に連絡する(企業顧客向け)",
"Additional information about the deal": "取引に関する追加情報",
"How the lead was acquired": "どのようにリードが獲得されたか。",
"Department responsible for this deal": "この取引を担当する部門",
"User responsible for this deal": "この取引を担当するユーザー",
"Deal phase or stage": "取引フェーズまたはステージ",
"Deal value amount": "取引額の金額",
"Currency for the estimated value": "推定値の通貨",
"Win probability (0-1, e.g., 0.75 for 75%)": "勝利率 (0-1, 例えば, 0.75 for 75%)",
"Expected deal closing date": "ディール終了予定日",
"Select the deal to update": "更新する取引を選択",
"Search by name, VAT number, emails or telephones": "名前、VAT番号、電子メールまたは電話で検索",
"Filter by email address": "メールアドレスでフィルター",
"Filter by VAT number": "付加価値税番号でフィルター",
"Filter by company status": "会社ステータスでフィルター",
"Filter by tag names (comma-separated)": "タグ名でフィルター (カンマ区切り)",
"Only companies updated after this date": "この日付以降に更新された企業のみ",
"Field to sort by": "並べ替えるフィールド",
"Sort direction": "並べ替えの方向",
"Number of results per page (default: 20)": "ページあたりの結果の数デフォルト20",
"Page number to retrieve (default: 1)": "取得するページ番号(デフォルト: 1)",
"Include custom field data in results": "カスタムフィールドデータを結果に含める",
"Search by first name, last name, email or telephone": "氏名、姓、電子メールまたは電話番号で検索",
"Filter contacts by company": "会社で連絡先をフィルター",
"Filter by contact status": "連絡先の状態でフィルター",
"Only contacts updated after this date": "この日付以降に更新された連絡先のみ",
"Search by title, reference or customer name": "タイトル、参照名、または顧客名で検索",
"Type of customer to filter by": "フィルタする顧客の種類",
"Filter deals by specific customer": "特定の顧客で取引をフィルター",
"Filter by deal phase or stage": "ディールフェーズまたはステージでフィルター",
"Filter by deal status (multiple selection)": "取引ステータスでフィルター (複数選択)",
"Filter by user responsible for deals": "取引を担当するユーザーでフィルター",
"Filter by specific estimated closing date": "特定の終了日時でフィルター",
"Filter deals closing after this date (inclusive)": "この日付以降に取引を閉じるフィルター(含む)",
"Filter deals closing before this date (inclusive)": "この日付の前に取引を閉じるフィルター(含む)",
"Only deals updated after this date (inclusive)": "この日付以降に更新された取引のみ (含む)",
"Only deals created before this date (inclusive)": "この日付の前に作成された取引のみ(含む)",
"Search by invoice number, purchase order number, payment reference or customer name": "請求書番号、注文番号、支払い参照、または顧客名で検索",
"Filter by full invoice number (e.g., \"2017 / 5\")": "全請求書番号でフィルター (例: \"2017/5\")",
"Filter invoices by specific customer": "特定の顧客で請求書をフィルター",
"Filter by department (company entity)": "部署でフィルター (会社エンティティ)",
"Filter by associated deal": "関連する取引でフィルター",
"Filter by associated project": "関連付けられたプロジェクトでフィルター",
"Filter by associated subscription": "関連付けられた購読でフィルター",
"Filter by invoice status (multiple selection)": "請求書ステータスでフィルター (複数選択)",
"Filter by purchase order number": "注文番号でフィルター",
"Filter by payment reference": "支払参照でフィルター",
"Filter invoices with date after this date (inclusive)": "この日付以降の日付で請求書をフィルター (含む)",
"Filter invoices with date before this date (inclusive)": "この日付より前の日付の請求書をフィルタリングします(含む)",
"Only invoices updated after this date": "この日付以降に更新された請求書のみ",
"Include late fee and interest calculations in response": "応答に遅延手数料と利息計算を含める",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"Female": "女性",
"Male": "男性",
"Non-binary": "Non-binary",
"Prefers not to say": "言わないことを好みます",
"Unknown": "不明",
"Euro (EUR)": "Euro (EUR)",
"US Dollar (USD)": "米ドル (USD)",
"British Pound (GBP)": "British Pound (GBP)",
"Canadian Dollar (CAD)": "カナダドル (CAD)",
"Swiss Franc (CHF)": "スイスフラン (CHF)",
"Danish Krone (DKK)": "Danish Krone (DKK)",
"Norwegian Krone (NOK)": "ノルウェー語クローネ (NOK)",
"Swedish Krona (SEK)": "スウェーデンクローナ (SEK)",
"Japanese Yen (JPY)": "日本円 (JPY)",
"Chinese Yuan (CNY)": "中国元 (CNY)",
"Czech Koruna (CZK)": "チェコ・コルナ (CZK)",
"Polish Zloty (PLN)": "Polish Zloty (PLN)",
"Romanian Leu (RON)": "ルーマニア語 (RON)",
"Turkish Lira (TRY)": "トルコ・リラ (TRY)",
"South African Rand (ZAR)": "南アフリカランド (ZAR)",
"Indian Rupee (INR)": "インド ルピー (INR)",
"Mexican Peso (MXN)": "Mexican Peso (MXN)",
"Chilean Peso (CLP)": "Chilean Peso (CLP)",
"Colombian Peso (COP)": "Colombian Peso (COP)",
"Peruvian Sol (PEN)": "ペルー・ソル(PEN)",
"Moroccan Dirham (MAD)": "モロッコディルハム (MAD)",
"Icelandic Krona (ISK)": "Icelandic Krona (ISK)",
"Bosnia and Herzegovina Mark (BAM)": "ボスニア・ヘルツェゴビナ・マーク (BAM)",
"Active": "有効",
"Deactivated": "無効化されました",
"Name": "Name",
"Date Added": "追加日",
"Date Updated": "更新日時",
"Ascending (A-Z, Oldest First)": "昇順 (A-Z、古い順)",
"Descending (Z-A, Newest First)": "降順",
"Open": "開く",
"Won": "獲得日",
"Lost": "失われた",
"Created Date": "作成日",
"Weighted Value": "加重値",
"Ascending (Oldest First, Lowest Value)": "昇順 (最初は最低値)",
"Descending (Newest First, Highest Value)": "降順",
"Draft": "下書き",
"Outstanding": "Outstanding",
"Matched": "一致しました",
"Invoice Date": "請求日",
"Ascending": "昇順",
"Descending": "降順",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭",
"New Contact": "新しい連絡先",
"New Company": "新規会社",
"New Deal": "新しい取引",
"Deal Won": "Deal Won",
"New Invoice": "新しい請求書",
"Triggers when a new contact is created": "新しい連絡先が作成されたときにトリガーします",
"Triggers when a new company is created": "新しい会社が作成されたときにトリガーする",
"Triggers when a new deal is created": "新しい取引が作成されたときに発生する",
"Triggers when a deal is won/accepted": "取引が勝利/受理されたときに発生する",
"Triggers when a new invoice is drafted": "新しい請求書が作成されたときに発行されます"
}

View File

@@ -0,0 +1,261 @@
{
"\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ": "\n Om uw OAuth2 referenties te verkrijgen:\n \n 1. Ga naar de Teamleader-marktplaats (https://marketplace. eamleader.eu)\n 2. Log in of maak een account aan\n 3. Ga naar \"Build\" en klik op \"Creëer een nieuwe integratie\"\n 4. Vul de vereiste informatie in\n 5. Op de instellingenpagina van je integratie geconfigureerd:\n - Voeg `https://cloud.activepieces toe. om/redirect` naar de toegestane omleidings-URIs\n - Selecteer alle vereiste toepassingsgebieden voor uw integratie\n 6. Kopieer de Client-ID en Clientgeheim\n ",
"Create Contact": "Contactpersoon aanmaken",
"Update Contact": "Contactpersoon bijwerken",
"Create Company": "Bedrijf aanmaken",
"Update Company": "Bedrijf bijwerken",
"Link Contact to Company": "Contact koppelen aan bedrijf",
"Unlink Contact from Company": "Ontkoppel contact van Bedrijf",
"Create Deal": "Transactie aanmaken",
"Update Deal": "Update Deal",
"Search Companies": "Bedrijven zoeken",
"Search Contacts": "Contactpersonen zoeken",
"Search Deals": "Zoek aanbiedingen",
"Search Invoices": "Zoek facturen",
"Custom API Call": "Custom API Call",
"Create a new contact record": "Maak een nieuw contact record",
"Modify existing contact data": "Bestaande contactgegevens wijzigen",
"Add a new company record": "Voeg een nieuw bedrijfsdossier toe",
"Modify company information": "Bedrijfsgegevens wijzigen",
"Associate a contact with a company": "Koppel een contactpersoon aan een bedrijf",
"Remove the association between contact and company": "Verwijder de koppeling tussen contact en bedrijf",
"Create a new deal/opportunity": "Maak een nieuwe deal/kans",
"Modify deal properties": "Pas transactieeigenschappen aan",
"List or filter companies": "Lijst of filter bedrijven",
"List or filter contacts": "Lijst of filter contactpersonen",
"List or filter deals": "Lijst of filter aanbiedingen",
"List or filter invoices": "Lijst of filter facturen",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"First Name": "Voornaam",
"Last Name": "Achternaam",
"Salutation": "Aanspreektitel",
"Emails": "E-mails",
"Phone Numbers": "Telefoon nummers",
"Website": "website",
"Addresses": "Adres",
"Language": "Taal",
"Gender": "Geslacht",
"Birth Date": "Geboorte datum",
"IBAN": "IBAN",
"BIC": "BIC",
"National ID Number": "Nationaal ID-nummer",
"Remarks": "Opmerkingen",
"Tags": "Labels",
"Custom Fields": "Aangepaste velden",
"Marketing Consent": "Marketing toestemming",
"Contact": "Contactpersoon",
"Company Name": "Bedrijfsnaam",
"Country Code": "Land Code",
"Business Type": "Type bedrijf",
"VAT Number": "BTW nummer",
"Responsible User ID": "Verantwoordelijke gebruiker ID",
"Preferred Currency": "Voorkeur valuta",
"Company": "Bedrijfsnaam",
"Position": "Positie",
"Decision Maker": "Beslisser",
"Deal Title": "Transactie Titel",
"Customer Type": "Klant type",
"Customer": "Klant",
"Contact Person": "Contactpersoon",
"Summary": "Summary",
"Source": "Bron",
"Department": "Afdeling",
"Responsible User": "Verantwoordelijke gebruiker",
"Phase": "Fase",
"Estimated Value": "Geschatte waarde",
"Value Currency": "Waarde Valuta",
"Estimated Probability": "Geschatte Waarschijnlijkheid",
"Estimated Closing Date": "Geschatte sluitingsdatum",
"Deal": "Koopjes",
"Search Term": "Zoek term",
"Email": "E-mail",
"Status": "status",
"Updated Since": "Bijgewerkt sinds",
"Sort Field": "Sorteren op veld",
"Sort Order": "Sorteren bestelling",
"Results Per Page": "Resultaten per pagina",
"Page Number": "Pagina Nummer",
"Include Custom Fields": "Inclusief aangepaste velden",
"Deal Phase": "Deal Fase",
"Exact Closing Date": "Exacte sluitingsdatum",
"Closing Date From": "Sluitingsdatum vanaf",
"Closing Date Until": "Sluitingsdatum tot",
"Created Before": "Aangemaakt voor",
"Invoice Number": "Factuur Nummer",
"Project": "Project",
"Subscription": "Abbonnement",
"Purchase Order Number": "Inkooporder nummer",
"Payment Reference": "Betaling referentie",
"Invoice Date After": "Factuur datum na",
"Invoice Date Before": "Factuurdatum vóór",
"Include Late Fee Information": "Late vergoeding informatie insluiten",
"Method": "Methode",
"Headers": "Kopteksten",
"Query Parameters": "Query parameters",
"Body": "Lichaam",
"Response is Binary ?": "Antwoord is binair?",
"No Error on Failure": "Geen fout bij fout",
"Timeout (in seconds)": "Time-out (in seconden)",
"First name of the contact": "Voornaam van de contactpersoon",
"Last name of the contact": "Achternaam van de contactpersoon",
"Salutation (e.g., Mr, Mrs, Dr)": "Aanhef (bijv. Mr, Mrs, Dr)",
"Email addresses for the contact": "E-mailadressen voor de contactpersoon",
"Phone numbers for the contact": "Telefoonnummers voor de contactpersoon",
"Website URL": "Website URL",
"Contact addresses": "Contact adressen",
"Language code (e.g., en, nl, fr)": "Taalcode (bijv. en, nl, fr)",
"Gender of the contact": "Geslacht van het contact",
"Birth date (YYYY-MM-DD format)": "Geboortedatum (JJJJ-MM-DD formaat)",
"International Bank Account Number": "International Bank Rekeningnummer",
"Bank Identifier Code": "Identifier Bank",
"National identification number": "Nationaal identificatienummer",
"Additional notes (supports Markdown)": "Extra notities (ondersteunt Markdown)",
"Contact tags": "Contact labels",
"Custom field values": "Aangepaste veld waarden",
"Allow marketing emails": "Sta marketing e-mails toe",
"Select the contact to update": "Selecteer de contactpersoon om te updaten",
"Email addresses (replaces all existing emails)": "E-mailadressen (vervangt alle bestaande e-mails)",
"Phone numbers (replaces all existing numbers)": "Telefoonnummers (vervangt alle bestaande nummers)",
"Contact addresses (replaces all existing addresses)": "Contactadressen (vervangt alle bestaande adressen)",
"Contact tags (replaces all existing tags)": "Contact labels (vervangt alle bestaande tags)",
"Name of the company": "Naam van het bedrijf",
"Two-letter country code (e.g., BE, NL, US) for business type selection": "Twee letter landcode (bijv. BE, NL, US) voor bedrijfstype selectie",
"Legal structure of the company": "Juridische structuur van het bedrijf",
"VAT/tax identification number": "BTW identificatienummer",
"Email addresses for the company": "E-mailadressen voor het bedrijf",
"Phone numbers for the company": "Telefoonnummers voor het bedrijf",
"Company website URL": "URL bedrijfswebsite",
"Company addresses": "Bedrijfs adressen",
"ID of the user responsible for this company": "ID van de gebruiker die verantwoordelijk is voor dit bedrijf",
"Company tags": "Bedrijf labels",
"Preferred currency for this company": "Gewenste valuta voor dit bedrijf",
"Select the company to update": "Selecteer het bedrijf om te updaten",
"Company addresses (replaces all existing addresses)": "Bedrijfsadressen (vervangt alle bestaande adressen)",
"Company tags (replaces all existing tags)": "Bedrijfslabel (vervangt alle bestaande tags)",
"Select the contact to link": "Selecteer de contactpersoon om te koppelen",
"Select the company to link to": "Selecteer het bedrijf om naar te linken",
"Job title or role (e.g., CEO, Manager)": "Functie titel of rol (bijv. CEO, Manager)",
"Is this contact a decision maker?": "Is dit contact een besluitnemer?",
"Select the contact to unlink": "Selecteer de contactpersoon om te ontkoppelen",
"Select the company to unlink from": "Selecteer het bedrijf om van te ontkoppelen",
"Title of the deal": "Titel van de deal",
"Type of customer for this deal": "Soort klant voor deze deal",
"Select the customer (company or contact)": "Klant selecteren (bedrijf of contact)",
"Contact person for this deal (for company customers)": "Neem contact op met persoon voor deze deal (voor bedrijfsklanten)",
"Additional information about the deal": "Extra informatie over de deal",
"How the lead was acquired": "Hoe de lead werd verworven",
"Department responsible for this deal": "Afdeling verantwoordelijk voor deze deal",
"User responsible for this deal": "Gebruiker verantwoordelijk voor deze deal",
"Deal phase or stage": "Deal fase of fase",
"Deal value amount": "Aanbieding waarde bedrag",
"Currency for the estimated value": "Valuta voor de geschatte waarde",
"Win probability (0-1, e.g., 0.75 for 75%)": "Win waarschijnlijkheid (0-1, b.v. 0.75 voor 75%)",
"Expected deal closing date": "Verwachte transactiesluitingsdatum",
"Select the deal to update": "Selecteer de deal om bij te werken",
"Search by name, VAT number, emails or telephones": "Zoek op naam, BTW-nummer, e-mails of telefoons",
"Filter by email address": "Filter op e-mailadres",
"Filter by VAT number": "Filter op BTW-nummer",
"Filter by company status": "Filter op bedrijfsstatus",
"Filter by tag names (comma-separated)": "Filter op tagnamen (komma gescheiden)",
"Only companies updated after this date": "Alleen bedrijven bijgewerkt na deze datum",
"Field to sort by": "Veld om te sorteren op",
"Sort direction": "Sorteer richting",
"Number of results per page (default: 20)": "Aantal resultaten per pagina (standaard: 20)",
"Page number to retrieve (default: 1)": "Te ophalen paginanummer (standaard: 1)",
"Include custom field data in results": "Aangepaste veldgegevens in resultaten opnemen",
"Search by first name, last name, email or telephone": "Zoek op voornaam, achternaam, e-mail of telefoon",
"Filter contacts by company": "Contactpersonen filteren op bedrijf",
"Filter by contact status": "Filteren op contactstatus",
"Only contacts updated after this date": "Alleen contacten bijgewerkt na deze datum",
"Search by title, reference or customer name": "Zoek op titel, referentie of klantnaam",
"Type of customer to filter by": "Type klant om te filteren op",
"Filter deals by specific customer": "Filter aanbiedingen op specifieke klant",
"Filter by deal phase or stage": "Filter op deal fase of fase",
"Filter by deal status (multiple selection)": "Filter op transactiestatus (meervoudige selectie)",
"Filter by user responsible for deals": "Filter op gebruiker die verantwoordelijk is voor deals",
"Filter by specific estimated closing date": "Filter op specifieke geschatte sluitingsdatum",
"Filter deals closing after this date (inclusive)": "Filter deals sluiten na deze datum (inclusief)",
"Filter deals closing before this date (inclusive)": "Filter deals sluiten voor deze datum (inclusief)",
"Only deals updated after this date (inclusive)": "Alleen aanbiedingen bijgewerkt na deze datum (inclusief)",
"Only deals created before this date (inclusive)": "Alleen deals gemaakt voor deze datum (inclusief)",
"Search by invoice number, purchase order number, payment reference or customer name": "Zoek op factuurnummer, bestelnummer, betalingsreferentie of klantnaam",
"Filter by full invoice number (e.g., \"2017 / 5\")": "Filter op volledig factuurnummer (bijv. \"2017 / 5\")",
"Filter invoices by specific customer": "Filter facturen op specifieke klant",
"Filter by department (company entity)": "Filter op afdeling (bedrijfsentiteit)",
"Filter by associated deal": "Filteren op bijbehorende deal",
"Filter by associated project": "Filter op gekoppeld project",
"Filter by associated subscription": "Filter op gekoppeld abonnement",
"Filter by invoice status (multiple selection)": "Filter op factuurstatus (meervoudige selectie)",
"Filter by purchase order number": "Filteren op inkooporder nummer",
"Filter by payment reference": "Filter op betalingsreferentie",
"Filter invoices with date after this date (inclusive)": "Filter facturen met datum na deze datum (inclusief)",
"Filter invoices with date before this date (inclusive)": "Filter facturen met datum voor deze datum (inclusief)",
"Only invoices updated after this date": "Alleen facturen bijgewerkt na deze datum",
"Include late fee and interest calculations in response": "Inclusief rente en rente berekeningen in reactie",
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
"Female": "Vrouwelijk",
"Male": "Mannelijk",
"Non-binary": "Niet-binair",
"Prefers not to say": "Voorkeur om niet te zeggen",
"Unknown": "Onbekend",
"Euro (EUR)": "Euro (EUR)",
"US Dollar (USD)": "Amerikaanse Dollar (USD)",
"British Pound (GBP)": "Britse pond (GBP)",
"Canadian Dollar (CAD)": "Canadese Dollar (CAD)",
"Swiss Franc (CHF)": "Zwitserse Franc (CHF)",
"Danish Krone (DKK)": "Danish Krone (DKK)",
"Norwegian Krone (NOK)": "Noorse Krone (NOK)",
"Swedish Krona (SEK)": "Zweedse kroon (SEK)",
"Japanese Yen (JPY)": "Japanse Yen (JPY)",
"Chinese Yuan (CNY)": "Chinese Yuan (CNY)",
"Czech Koruna (CZK)": "Tsjechische kroon (CZK)",
"Polish Zloty (PLN)": "Poolse Zloty (PLN)",
"Romanian Leu (RON)": "Roemeense leu (RON)",
"Turkish Lira (TRY)": "Turkse lire (TRY)",
"South African Rand (ZAR)": "Zuid-Afrikaanse Rand (ZAR)",
"Indian Rupee (INR)": "Indiase Rupee (INR)",
"Mexican Peso (MXN)": "Mexican Peso (MXN)",
"Chilean Peso (CLP)": "Chilean Peso (CLP)",
"Colombian Peso (COP)": "Colombiaanse Peso (COP)",
"Peruvian Sol (PEN)": "Peruviaanse Sol (PEN)",
"Moroccan Dirham (MAD)": "Marokkaanse Dirham (MAD)",
"Icelandic Krona (ISK)": "Icelandic Krona (ISK)",
"Bosnia and Herzegovina Mark (BAM)": "Bosnië en Herzegovina Mark (BAM)",
"Active": "Actief",
"Deactivated": "Gedeactiveerd",
"Name": "Naam",
"Date Added": "Datum toegevoegd",
"Date Updated": "Datum bijgewerkt",
"Ascending (A-Z, Oldest First)": "Oplopend (A-Z, Oudste eerst)",
"Descending (Z-A, Newest First)": "Aflopend (Z-A, Nieuwste eerst)",
"Open": "Open",
"Won": "Gewonnen",
"Lost": "Verloren",
"Created Date": "Aangemaakt op",
"Weighted Value": "Gewogen waarde",
"Ascending (Oldest First, Lowest Value)": "Oplopend (oudste eerst, laagste waarde)",
"Descending (Newest First, Highest Value)": "Aflopend (nieuwste eerst, hoogste waarde)",
"Draft": "Concept",
"Outstanding": "Openstaand",
"Matched": "Overeenkomend",
"Invoice Date": "Factuur datum",
"Ascending": "Oplopend",
"Descending": "Aflopend",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD",
"New Contact": "Nieuw contactpersoon",
"New Company": "Nieuw bedrijf",
"New Deal": "Nieuwe deal",
"Deal Won": "Deal gewonnen",
"New Invoice": "Nieuwe factuur",
"Triggers when a new contact is created": "Triggert wanneer een nieuw contact wordt aangemaakt",
"Triggers when a new company is created": "Triggert wanneer een nieuw bedrijf wordt aangemaakt",
"Triggers when a new deal is created": "Triggert wanneer een nieuwe transactie wordt aangemaakt",
"Triggers when a deal is won/accepted": "Triggert wanneer een transactie wordt gewonnen/geaccepteerd",
"Triggers when a new invoice is drafted": "Triggert wanneer een nieuwe factuur is gemaakt"
}

View File

@@ -0,0 +1,261 @@
{
"\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ": "\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ",
"Create Contact": "Criar contato",
"Update Contact": "Atualizar contato",
"Create Company": "Criar Empresa",
"Update Company": "Atualizar Empresa",
"Link Contact to Company": "Vincular contato à empresa",
"Unlink Contact from Company": "Desvincular Contato da Empresa",
"Create Deal": "Criar oferta",
"Update Deal": "Atualizar Oferta",
"Search Companies": "Buscar Empresas",
"Search Contacts": "Pesquisar contatos",
"Search Deals": "Pesquisar Ofertas",
"Search Invoices": "Pesquisar faturas",
"Custom API Call": "Chamada de API personalizada",
"Create a new contact record": "Criar um novo registro de contato",
"Modify existing contact data": "Modificar dados de contato existentes",
"Add a new company record": "Adicionar um novo registro da empresa",
"Modify company information": "Modificar informações da empresa",
"Associate a contact with a company": "Associar um contato com uma empresa",
"Remove the association between contact and company": "Remover a associação entre o contato e a empresa",
"Create a new deal/opportunity": "Criar uma nova oferta/oportunidade",
"Modify deal properties": "Modificar propriedades da venda",
"List or filter companies": "Listar ou filtrar empresas",
"List or filter contacts": "Listar ou filtrar contatos",
"List or filter deals": "Listar ou filtrar negócios",
"List or filter invoices": "Listar ou filtrar faturas",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"First Name": "Nome",
"Last Name": "Sobrenome",
"Salutation": "Saudação",
"Emails": "e-mails",
"Phone Numbers": "Números de telefone",
"Website": "site",
"Addresses": "Endereços",
"Language": "IDIOMA",
"Gender": "Gênero",
"Birth Date": "Data de Nascimento",
"IBAN": "IBAN",
"BIC": "BIC",
"National ID Number": "Número de identificação nacional",
"Remarks": "Observações",
"Tags": "Etiquetas",
"Custom Fields": "Campos Personalizados",
"Marketing Consent": "Consentimento de Marketing",
"Contact": "contato",
"Company Name": "Nome da Empresa",
"Country Code": "Código do país",
"Business Type": "Tipo de Empresa",
"VAT Number": "Número de IVA",
"Responsible User ID": "Identificação de Usuário Responsável",
"Preferred Currency": "Moeda preferida",
"Company": "Empresas",
"Position": "Posição",
"Decision Maker": "Tomador de decisão",
"Deal Title": "Título da oferta",
"Customer Type": "Tipo de Cliente",
"Customer": "Cliente",
"Contact Person": "Pessoa de Contato",
"Summary": "Summary",
"Source": "fonte",
"Department": "Departamento",
"Responsible User": "Usuário Responsável",
"Phase": "Fase",
"Estimated Value": "Valor Estimado",
"Value Currency": "Moeda Valor",
"Estimated Probability": "Probabilidade estimada",
"Estimated Closing Date": "Data estimada de encerramento",
"Deal": "Negócio",
"Search Term": "Termo para pesquisa",
"Email": "e-mail",
"Status": "Estado",
"Updated Since": "Atualizado desde",
"Sort Field": "Classificar Campo",
"Sort Order": "Ordem de classificação",
"Results Per Page": "Resultados por Página",
"Page Number": "Número da página",
"Include Custom Fields": "Incluir Campos Personalizados",
"Deal Phase": "Fase da oferta",
"Exact Closing Date": "Data exata de encerramento",
"Closing Date From": "Data de encerramento de",
"Closing Date Until": "Data de Fechamento Até",
"Created Before": "Criado Antes",
"Invoice Number": "Número da fatura",
"Project": "Projecto",
"Subscription": "Assinatura",
"Purchase Order Number": "Número do pedido",
"Payment Reference": "Referência de pagamento",
"Invoice Date After": "Data da Fatura Depois",
"Invoice Date Before": "Data da Fatura Antes",
"Include Late Fee Information": "Incluir Informações de Taxa Atrasada",
"Method": "Método",
"Headers": "Cabeçalhos",
"Query Parameters": "Parâmetros da consulta",
"Body": "Conteúdo",
"Response is Binary ?": "A resposta é binária ?",
"No Error on Failure": "Nenhum erro no Failure",
"Timeout (in seconds)": "Tempo limite (em segundos)",
"First name of the contact": "Primeiro nome do contato",
"Last name of the contact": "Último nome do contato",
"Salutation (e.g., Mr, Mrs, Dr)": "Saudação (ex.: Mr, Mrs, Dr)",
"Email addresses for the contact": "Endereços de e-mail para o contato",
"Phone numbers for the contact": "Números de telefone para o contato",
"Website URL": "URL do site",
"Contact addresses": "Endereços de contato",
"Language code (e.g., en, nl, fr)": "Código de idioma (ex.: en, nl, fr)",
"Gender of the contact": "Sexo do contato",
"Birth date (YYYY-MM-DD format)": "Data de nascimento (formato AAAA-MM-DD)",
"International Bank Account Number": "Número da Conta Bancária Internacional",
"Bank Identifier Code": "Código de identificação bancária",
"National identification number": "Número de identificação nacional",
"Additional notes (supports Markdown)": "Notas adicionais (suporta Markdown)",
"Contact tags": "Tags de contato",
"Custom field values": "Valores de campo personalizados",
"Allow marketing emails": "Permitir e-mails de marketing",
"Select the contact to update": "Selecione o contato para atualização",
"Email addresses (replaces all existing emails)": "Endereços de e-mail (substitui todos os e-mails existentes)",
"Phone numbers (replaces all existing numbers)": "Números de telefone (substitui todos os números existentes)",
"Contact addresses (replaces all existing addresses)": "Endereços de contato (substitui todos os endereços existentes)",
"Contact tags (replaces all existing tags)": "Tags de contato (substitui todas as tags existentes)",
"Name of the company": "Nome da empresa",
"Two-letter country code (e.g., BE, NL, US) for business type selection": "Código do país de duas letras (p. ex. BE, NL, EUA) para a seleção do tipo de negócio",
"Legal structure of the company": "Estrutura jurídica da empresa",
"VAT/tax identification number": "CPF/CNPJ",
"Email addresses for the company": "Endereços de e-mail para a empresa",
"Phone numbers for the company": "Números de telefone para a empresa",
"Company website URL": "URL da empresa",
"Company addresses": "Endereços da empresa",
"ID of the user responsible for this company": "ID do usuário responsável por esta empresa",
"Company tags": "Tags da empresa",
"Preferred currency for this company": "Moeda preferida para esta empresa",
"Select the company to update": "Selecione a empresa para atualizar",
"Company addresses (replaces all existing addresses)": "Endereços da empresa (substitui todos os endereços existentes)",
"Company tags (replaces all existing tags)": "Tags da empresa (substitui todas as tags existentes)",
"Select the contact to link": "Selecione o contato a vincular",
"Select the company to link to": "Selecione a empresa para vincular",
"Job title or role (e.g., CEO, Manager)": "Título ou função do trabalho (por exemplo, CEO, Gerente)",
"Is this contact a decision maker?": "Este contacto é um decisor?",
"Select the contact to unlink": "Selecione o contato para desvincular",
"Select the company to unlink from": "Selecione a empresa para desvincular de",
"Title of the deal": "Título da oferta",
"Type of customer for this deal": "Tipo de cliente para esta operação",
"Select the customer (company or contact)": "Selecione o cliente (empresa ou contato)",
"Contact person for this deal (for company customers)": "Pessoa de contato para esta operação (para clientes corporativos)",
"Additional information about the deal": "Informações adicionais sobre a operação",
"How the lead was acquired": "Como a chumbo foi adquirida",
"Department responsible for this deal": "Departamento responsável por esta oferta",
"User responsible for this deal": "Usuário responsável por esta operação",
"Deal phase or stage": "Fase ou fase de oferta",
"Deal value amount": "Valor da oferta",
"Currency for the estimated value": "Moeda para o valor estimado",
"Win probability (0-1, e.g., 0.75 for 75%)": "Vença de probabilidade (0-1, por exemplo, 0.75 para 75%)",
"Expected deal closing date": "Data de fechamento da operação esperada",
"Select the deal to update": "Selecione a oferta para atualizar",
"Search by name, VAT number, emails or telephones": "Pesquisar por nome, número de IVA, e-mails ou telefones",
"Filter by email address": "Filtrar por endereço de e-mail",
"Filter by VAT number": "Filtrar por número VAT",
"Filter by company status": "Filtrar por status da empresa",
"Filter by tag names (comma-separated)": "Filtrar por nomes de tags (separados por vírgula)",
"Only companies updated after this date": "Apenas empresas atualizadas após esta data",
"Field to sort by": "Campo para ordenar por",
"Sort direction": "Direção de ordenação",
"Number of results per page (default: 20)": "Número de resultados por página (padrão: 20)",
"Page number to retrieve (default: 1)": "Número da página a ser recuperada (padrão: 1)",
"Include custom field data in results": "Incluir dados do campo personalizado nos resultados",
"Search by first name, last name, email or telephone": "Pesquisar por nome, sobrenome, e-mail ou telefone",
"Filter contacts by company": "Filtrar contatos por empresa",
"Filter by contact status": "Filtrar por estado de contato",
"Only contacts updated after this date": "Somente contatos atualizados após esta data",
"Search by title, reference or customer name": "Pesquisar por título, referência ou nome de cliente",
"Type of customer to filter by": "Tipo de cliente a filtrar por",
"Filter deals by specific customer": "Filtrar ofertas por cliente específico",
"Filter by deal phase or stage": "Filtrar por fase de negócio ou fase",
"Filter by deal status (multiple selection)": "Filtrar por status do negócio (seleção múltipla)",
"Filter by user responsible for deals": "Filtrar por usuário responsável por ofertas",
"Filter by specific estimated closing date": "Filtrar por data de fechamento específica estimada",
"Filter deals closing after this date (inclusive)": "Filtrar negócios fechando após esta data (inclusive)",
"Filter deals closing before this date (inclusive)": "Filtrar negócios fechando antes desta data (inclusive)",
"Only deals updated after this date (inclusive)": "Só ofertas atualizadas após esta data (inclusive)",
"Only deals created before this date (inclusive)": "Apenas ofertas criadas antes desta data (inclusive)",
"Search by invoice number, purchase order number, payment reference or customer name": "Pesquisar por número de fatura, número do pedido de compra, referência do pagamento ou nome do cliente",
"Filter by full invoice number (e.g., \"2017 / 5\")": "Filtrar por número completo da fatura (por exemplo, \"2017 / 5\")",
"Filter invoices by specific customer": "Filtrar faturas por cliente específico",
"Filter by department (company entity)": "Filtrar por departamento (entidade da empresa)",
"Filter by associated deal": "Filtrar por negócio associado",
"Filter by associated project": "Filtrar por projeto associado",
"Filter by associated subscription": "Filtrar por assinatura associada",
"Filter by invoice status (multiple selection)": "Filtrar por status da fatura (seleção múltipla)",
"Filter by purchase order number": "Filtrar por número de ordem de compra",
"Filter by payment reference": "Filtrar por referência de pagamento",
"Filter invoices with date after this date (inclusive)": "Filtrar faturas com data posterior a esta data (inclusive)",
"Filter invoices with date before this date (inclusive)": "Filtrar faturas com data antes desta data (inclusive)",
"Only invoices updated after this date": "Somente faturas atualizadas após esta data",
"Include late fee and interest calculations in response": "Incluir taxas atrasadas e cálculos de juros na resposta",
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
"Female": "Feminino",
"Male": "Masculino",
"Non-binary": "Não-binário",
"Prefers not to say": "Prefere não dizer",
"Unknown": "Desconhecido",
"Euro (EUR)": "Euro (EUR)",
"US Dollar (USD)": "Dólar Americano (USD)",
"British Pound (GBP)": "Libra britânica (GBP)",
"Canadian Dollar (CAD)": "Dólar canadense (CAD)",
"Swiss Franc (CHF)": "Franco suíço (CHF)",
"Danish Krone (DKK)": "Danish Krone (DKK)",
"Norwegian Krone (NOK)": "Coroa norueguesa (NOK)",
"Swedish Krona (SEK)": "Coroa sueca (SEK)",
"Japanese Yen (JPY)": "Iene japonês (JPY)",
"Chinese Yuan (CNY)": "Yuan chinês (CNY)",
"Czech Koruna (CZK)": "Coroa checa (CZK)",
"Polish Zloty (PLN)": "Zloty polonês (PLN)",
"Romanian Leu (RON)": "Leu romeno (RON)",
"Turkish Lira (TRY)": "Lira turca (TRY)",
"South African Rand (ZAR)": "Rand sul-africano (ZAR)",
"Indian Rupee (INR)": "Rupia indiana (INR)",
"Mexican Peso (MXN)": "Mexican Peso (MXN)",
"Chilean Peso (CLP)": "Chilean Peso (CLP)",
"Colombian Peso (COP)": "Peso colombiano (COP)",
"Peruvian Sol (PEN)": "Sol peruano (PEN)",
"Moroccan Dirham (MAD)": "Dirham marroquino (MAD)",
"Icelandic Krona (ISK)": "Icelandic Krona (ISK)",
"Bosnia and Herzegovina Mark (BAM)": "Marco Bósnia-Herzegovina (BAM)",
"Active": "Ativo",
"Deactivated": "Desativado",
"Name": "Nome",
"Date Added": "Data de inclusão",
"Date Updated": "Data de atualização",
"Ascending (A-Z, Oldest First)": "Crescente (A-Z, Primeiro Mais Antigo)",
"Descending (Z-A, Newest First)": "Descendente (Z-A, mais novos primeiro)",
"Open": "Abertas",
"Won": "Ganhou",
"Lost": "Perdido",
"Created Date": "Data de Criação",
"Weighted Value": "Valor ponderado",
"Ascending (Oldest First, Lowest Value)": "Ascendente (mais antigo primeiro, mais baixo)",
"Descending (Newest First, Highest Value)": "Descendente (mais recente primeiro, maior valor)",
"Draft": "Rascunho",
"Outstanding": "Pendentes",
"Matched": "Correspondido",
"Invoice Date": "Data da Fatura",
"Ascending": "Crescente",
"Descending": "Decrescente",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA",
"New Contact": "Novo Contato",
"New Company": "Nova Empresa",
"New Deal": "Nova Oferta",
"Deal Won": "Oferta vencida",
"New Invoice": "Nova fatura",
"Triggers when a new contact is created": "Dispara quando um novo contato é criado",
"Triggers when a new company is created": "Dispara quando uma nova empresa é criada",
"Triggers when a new deal is created": "Aciona quando uma nova oferta é criada",
"Triggers when a deal is won/accepted": "Dispara quando uma operação é ganha/aceita",
"Triggers when a new invoice is drafted": "Aciona quando uma nova fatura é redigida"
}

View File

@@ -0,0 +1,260 @@
{
"Teamleader": "Лидер команды",
"\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ": "\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ",
"Create Contact": "Создать контакт",
"Update Contact": "Обновить контакт",
"Create Company": "Создать компанию",
"Update Company": "Обновить компанию",
"Link Contact to Company": "Связаться с Компанией",
"Unlink Contact from Company": "Отвязать контакт от компании",
"Create Deal": "Создать сделку",
"Update Deal": "Обновить сделку",
"Search Companies": "Поиск компаний",
"Search Contacts": "Поиск контактов",
"Search Deals": "Поиск сделок",
"Search Invoices": "Поиск счетов",
"Custom API Call": "Пользовательский вызов API",
"Create a new contact record": "Создать новую запись контактов",
"Modify existing contact data": "Изменить существующие контактные данные",
"Add a new company record": "Добавить новую запись компании",
"Modify company information": "Изменить информацию о компании",
"Associate a contact with a company": "Связать контакт с компанией",
"Remove the association between contact and company": "Удалить связь между контактом и компанией",
"Create a new deal/opportunity": "Создать новую сделку/сделку",
"Modify deal properties": "Изменить свойства сделки",
"List or filter companies": "Список или фильтровать компании",
"List or filter contacts": "Список или фильтровать контакты",
"List or filter deals": "Список или фильтр сделок",
"List or filter invoices": "Список или фильтр счетов",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"First Name": "First Name",
"Last Name": "Фамилия",
"Salutation": "Приветствие",
"Emails": "Письма",
"Phone Numbers": "Номера телефонов",
"Website": "Сайт",
"Addresses": "Адреса",
"Language": "Язык",
"Gender": "Гендерная проблематика",
"Birth Date": "Дата рождения",
"IBAN": "IBAN",
"BIC": "БИК",
"National ID Number": "Номер национального ID",
"Remarks": "Замечания",
"Tags": "Теги",
"Custom Fields": "Пользовательские поля",
"Marketing Consent": "Маркетинговое согласие",
"Contact": "Контакт",
"Company Name": "Название компании",
"Country Code": "Код страны",
"Business Type": "Тип бизнеса",
"VAT Number": "Номер НДС",
"Responsible User ID": "Ответственный ID пользователя",
"Preferred Currency": "Предпочтительная валюта",
"Company": "Компания",
"Position": "Позиция",
"Decision Maker": "Принимающий решения",
"Deal Title": "Название сделки",
"Customer Type": "Тип клиента",
"Customer": "Покупатель",
"Contact Person": "Контактное лицо",
"Summary": "Summary",
"Source": "Источник",
"Department": "Отдел",
"Responsible User": "Ответственный пользователь",
"Phase": "Фаза",
"Estimated Value": "Расчетная стоимость",
"Value Currency": "Валюта ценности",
"Estimated Probability": "Предполагаемая вероятность",
"Estimated Closing Date": "Предполагаемая дата закрытия",
"Deal": "Сделка",
"Search Term": "Поиск термина",
"Email": "Почта",
"Status": "Статус",
"Updated Since": "Обновлено С",
"Sort Field": "Поле сортировки",
"Sort Order": "Порядок сортировки",
"Results Per Page": "Результаты на странице",
"Page Number": "Номер страницы",
"Include Custom Fields": "Включить пользовательские поля",
"Deal Phase": "Этап сделки",
"Exact Closing Date": "Точная дата закрытия",
"Closing Date From": "Дата закрытия с",
"Closing Date Until": "Дата закрытия до",
"Created Before": "Создан до",
"Invoice Number": "Номер счёта",
"Project": "Проект",
"Subscription": "Подписка",
"Purchase Order Number": "Номер заказа на покупку",
"Payment Reference": "Ссылка на платеж",
"Invoice Date After": "Дата Счета После",
"Invoice Date Before": "Дата выставления счета до",
"Include Late Fee Information": "Включить информацию о последнем сборе",
"Method": "Метод",
"Headers": "Заголовки",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"First name of the contact": "Имя контакта",
"Last name of the contact": "Фамилия контакта",
"Salutation (e.g., Mr, Mrs, Dr)": "Salutation (например г-жи Др)",
"Email addresses for the contact": "Адреса электронной почты контакта",
"Phone numbers for the contact": "Номера телефонов контакта",
"Website URL": "URL сайта",
"Contact addresses": "Адреса контактов",
"Language code (e.g., en, nl, fr)": "Код языка (например, en, nl, fr)",
"Gender of the contact": "Гендерные аспекты контакта",
"Birth date (YYYY-MM-DD format)": "Дата рождения (в формате ГГГГ-ММ-ДД)",
"International Bank Account Number": "Номер международного банковского счета",
"Bank Identifier Code": "Идентификатор банка",
"National identification number": "Национальный идентификационный номер",
"Additional notes (supports Markdown)": "Дополнительные заметки (поддерживают Markdown)",
"Contact tags": "Теги контактов",
"Custom field values": "Пользовательские значения полей",
"Allow marketing emails": "Разрешить рассылку",
"Select the contact to update": "Выберите контакт для обновления",
"Email addresses (replaces all existing emails)": "Email адреса (заменяют все существующие письма)",
"Phone numbers (replaces all existing numbers)": "Номера телефонов (заменяет все существующие номера)",
"Contact addresses (replaces all existing addresses)": "Контактные адреса (заменяют все существующие адреса)",
"Contact tags (replaces all existing tags)": "Теги контактов (заменяют все существующие теги)",
"Name of the company": "Название компании",
"Two-letter country code (e.g., BE, NL, US) for business type selection": "Двухсимвольный код страны (например, BE, NL, US) для выбора бизнес-типа",
"Legal structure of the company": "Правовая структура компании",
"VAT/tax identification number": "НДС/налоговый номер",
"Email addresses for the company": "Email адреса компании",
"Phone numbers for the company": "Телефонные номера организации",
"Company website URL": "URL-адрес сайта компании",
"Company addresses": "Адреса компании",
"ID of the user responsible for this company": "ID пользователя, ответственного за эту компанию",
"Company tags": "Теги компании",
"Preferred currency for this company": "Предпочтительная валюта для этой компании",
"Select the company to update": "Выберите компанию для обновления",
"Company addresses (replaces all existing addresses)": "Адреса компании (заменяют все существующие адресы)",
"Company tags (replaces all existing tags)": "Теги компании (заменяют все существующие теги)",
"Select the contact to link": "Выберите контакт для ссылки",
"Select the company to link to": "Выберите компанию для ссылки на",
"Job title or role (e.g., CEO, Manager)": "Должность или роль (например, CEO, Manager)",
"Is this contact a decision maker?": "Является ли этот контакт принимающим решения?",
"Select the contact to unlink": "Выберите контакт, чтобы отвязать",
"Select the company to unlink from": "Выберите компанию для отвязки от",
"Title of the deal": "Название сделки",
"Type of customer for this deal": "Тип клиента для этой сделки",
"Select the customer (company or contact)": "Выберите клиента (компанию или контакт)",
"Contact person for this deal (for company customers)": "Контактное лицо для этой сделки (для клиентов компании)",
"Additional information about the deal": "Дополнительная информация о сделке",
"How the lead was acquired": "Как был приобретен ведущий",
"Department responsible for this deal": "Департамент, ответственный за эту сделку",
"User responsible for this deal": "Пользователь ответственный за эту сделку",
"Deal phase or stage": "Этап сделки или стадия",
"Deal value amount": "Сумма сделки",
"Currency for the estimated value": "Валюта расчетной стоимости",
"Win probability (0-1, e.g., 0.75 for 75%)": "Выиграйте вероятность (0-1, например, 0,75 для 75%)",
"Expected deal closing date": "Ожидаемая дата закрытия сделки",
"Select the deal to update": "Выберите сделку для обновления",
"Search by name, VAT number, emails or telephones": "Поиск по имени, номеру НДС, электронной почте или телефонам",
"Filter by email address": "Фильтр по email",
"Filter by VAT number": "Фильтр по номеру НДС",
"Filter by company status": "Фильтр по статусу компании",
"Filter by tag names (comma-separated)": "Фильтр по именам тегов (через запятую)",
"Only companies updated after this date": "Только компании, обновленные после этой даты",
"Field to sort by": "Сортировка по полю",
"Sort direction": "Направление сортировки",
"Number of results per page (default: 20)": "Количество результатов на странице (по умолчанию: 20)",
"Page number to retrieve (default: 1)": "Номер страницы для получения (по умолчанию: 1)",
"Include custom field data in results": "Включить данные настраиваемых полей в результаты",
"Search by first name, last name, email or telephone": "Поиск по имени, фамилии, электронной почте или телефону",
"Filter contacts by company": "Фильтровать контакты по компании",
"Filter by contact status": "Фильтр по статусу контакта",
"Only contacts updated after this date": "Только контакты, обновленные после этой даты",
"Search by title, reference or customer name": "Поиск по названию, ссылке или имени клиента",
"Type of customer to filter by": "Тип клиента для фильтрации",
"Filter deals by specific customer": "Фильтр по сделкам клиента",
"Filter by deal phase or stage": "Фильтр по фазе или стадии сделки",
"Filter by deal status (multiple selection)": "Фильтр по статусу сделки (несколько выборов)",
"Filter by user responsible for deals": "Фильтр по клиенту, ответственному за сделку",
"Filter by specific estimated closing date": "Фильтр по конкретной предполагаемой дате закрытия",
"Filter deals closing after this date (inclusive)": "Фильтр по сделкам, закрывающим после этой даты (включительно)",
"Filter deals closing before this date (inclusive)": "Фильтр по сделкам, закрывающим до этой даты (включительно)",
"Only deals updated after this date (inclusive)": "Сделки, обновленные только после этой даты (включительно)",
"Only deals created before this date (inclusive)": "Только сделки, созданные до этой даты (включительно)",
"Search by invoice number, purchase order number, payment reference or customer name": "Поиск по номеру счета, номеру заказа заказа, номеру платежа или имени клиента",
"Filter by full invoice number (e.g., \"2017 / 5\")": "Фильтр по полному номеру счета (например, \"2017 / 5\")",
"Filter invoices by specific customer": "Фильтровать счета-фактуры по выбранным клиентам",
"Filter by department (company entity)": "Фильтр по департаменту (сущности компании)",
"Filter by associated deal": "Фильтр по связанной сделке",
"Filter by associated project": "Фильтровать по связанному проекту",
"Filter by associated subscription": "Фильтр по связанной подписке",
"Filter by invoice status (multiple selection)": "Фильтр по статусу счета (несколько выборов)",
"Filter by purchase order number": "Фильтр по номеру покупки",
"Filter by payment reference": "Фильтр по ссылке платежа",
"Filter invoices with date after this date (inclusive)": "Фильтр счетов с датой после этой даты (включительно)",
"Filter invoices with date before this date (inclusive)": "Фильтр счетов с датой до этой даты (включительно)",
"Only invoices updated after this date": "Только счета-фактуры, обновленные после этой даты",
"Include late fee and interest calculations in response": "Включить задержка и расчет процентов в ответ",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"Female": "Женская",
"Male": "Муж",
"Non-binary": "Не бинарный",
"Prefers not to say": "Предпочитает не сказать",
"Unknown": "Неизвестен",
"Euro (EUR)": "Euro (EUR)",
"US Dollar (USD)": "Доллар США (USD)",
"British Pound (GBP)": "Британский фунт (GBP)",
"Canadian Dollar (CAD)": "Канадский доллар (CAD)",
"Swiss Franc (CHF)": "Швейцарский франк (CHF)",
"Danish Krone (DKK)": "Danish Krone (DKK)",
"Norwegian Krone (NOK)": "Норвежская крона (NOK)",
"Swedish Krona (SEK)": "Шведская крона (SEK)",
"Japanese Yen (JPY)": "Японская йена (JPY)",
"Chinese Yuan (CNY)": "Китайский Юань (CNY)",
"Czech Koruna (CZK)": "Чешская крона (CZK)",
"Polish Zloty (PLN)": "Польский злотый (PLN)",
"Romanian Leu (RON)": "Румынский леу (РОН)",
"Turkish Lira (TRY)": "Турецкая Лира (TRY)",
"South African Rand (ZAR)": "Южноафриканский ранд (ЗАР)",
"Indian Rupee (INR)": "Индийская рупия (INR)",
"Mexican Peso (MXN)": "Mexican Peso (MXN)",
"Chilean Peso (CLP)": "Chilean Peso (CLP)",
"Colombian Peso (COP)": "Колумбийское песо (КС)",
"Peruvian Sol (PEN)": "Перуанский соль (PEN)",
"Moroccan Dirham (MAD)": "Марокканский дирхам (MAD)",
"Icelandic Krona (ISK)": "Icelandic Krona (ISK)",
"Bosnia and Herzegovina Mark (BAM)": "Босния и Герцеговина Марк (BAM)",
"Active": "Активен",
"Deactivated": "Отключено",
"Name": "Наименование",
"Date Added": "Дата добавления",
"Date Updated": "Дата обновления",
"Ascending (A-Z, Oldest First)": "По возрастанию (А-Z, старейший первый)",
"Descending (Z-A, Newest First)": "По убыванию (Z-A, новые первые)",
"Open": "Открыть",
"Won": "Выиграно",
"Lost": "Потеря",
"Created Date": "Дата создания",
"Weighted Value": "Взвешенное значение",
"Ascending (Oldest First, Lowest Value)": "По возрастанию (Старейший по возрастанию)",
"Descending (Newest First, Highest Value)": "По убыванию (новейший первый, высший значение)",
"Draft": "Черновик",
"Outstanding": "Неоплаченные",
"Matched": "Совпадение",
"Invoice Date": "Дата Счета",
"Ascending": "По возрастанию",
"Descending": "По убыванию",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD",
"New Contact": "Новый контакт",
"New Company": "Новая компания",
"New Deal": "Новая сделка",
"Deal Won": "Выиграно сделок",
"New Invoice": "Новый счет",
"Triggers when a new contact is created": "Включает при создании нового контакта",
"Triggers when a new company is created": "Запускает при создании новой компании",
"Triggers when a new deal is created": "Триггеры при создании новой сделки",
"Triggers when a deal is won/accepted": "Вызывает, когда сделка выиграна/принята",
"Triggers when a new invoice is drafted": "Триггеры при составлении нового счета"
}

View File

@@ -0,0 +1,261 @@
{
"\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ": "\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Create Company": "Create Company",
"Update Company": "Update Company",
"Link Contact to Company": "Link Contact to Company",
"Unlink Contact from Company": "Unlink Contact from Company",
"Create Deal": "Create Deal",
"Update Deal": "Update Deal",
"Search Companies": "Search Companies",
"Search Contacts": "Search Contacts",
"Search Deals": "Search Deals",
"Search Invoices": "Search Invoices",
"Custom API Call": "Custom API Call",
"Create a new contact record": "Create a new contact record",
"Modify existing contact data": "Modify existing contact data",
"Add a new company record": "Add a new company record",
"Modify company information": "Modify company information",
"Associate a contact with a company": "Associate a contact with a company",
"Remove the association between contact and company": "Remove the association between contact and company",
"Create a new deal/opportunity": "Create a new deal/opportunity",
"Modify deal properties": "Modify deal properties",
"List or filter companies": "List or filter companies",
"List or filter contacts": "List or filter contacts",
"List or filter deals": "List or filter deals",
"List or filter invoices": "List or filter invoices",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"First Name": "First Name",
"Last Name": "Last Name",
"Salutation": "Salutation",
"Emails": "Emails",
"Phone Numbers": "Phone Numbers",
"Website": "Website",
"Addresses": "Addresses",
"Language": "Language",
"Gender": "Gender",
"Birth Date": "Birth Date",
"IBAN": "IBAN",
"BIC": "BIC",
"National ID Number": "National ID Number",
"Remarks": "Remarks",
"Tags": "Tags",
"Custom Fields": "Custom Fields",
"Marketing Consent": "Marketing Consent",
"Contact": "Contact",
"Company Name": "Company Name",
"Country Code": "Country Code",
"Business Type": "Business Type",
"VAT Number": "VAT Number",
"Responsible User ID": "Responsible User ID",
"Preferred Currency": "Preferred Currency",
"Company": "Company",
"Position": "Position",
"Decision Maker": "Decision Maker",
"Deal Title": "Deal Title",
"Customer Type": "Customer Type",
"Customer": "Customer",
"Contact Person": "Contact Person",
"Summary": "Summary",
"Source": "Source",
"Department": "Department",
"Responsible User": "Responsible User",
"Phase": "Phase",
"Estimated Value": "Estimated Value",
"Value Currency": "Value Currency",
"Estimated Probability": "Estimated Probability",
"Estimated Closing Date": "Estimated Closing Date",
"Deal": "Deal",
"Search Term": "Search Term",
"Email": "Email",
"Status": "Status",
"Updated Since": "Updated Since",
"Sort Field": "Sort Field",
"Sort Order": "Sort Order",
"Results Per Page": "Results Per Page",
"Page Number": "Page Number",
"Include Custom Fields": "Include Custom Fields",
"Deal Phase": "Deal Phase",
"Exact Closing Date": "Exact Closing Date",
"Closing Date From": "Closing Date From",
"Closing Date Until": "Closing Date Until",
"Created Before": "Created Before",
"Invoice Number": "Invoice Number",
"Project": "Project",
"Subscription": "Subscription",
"Purchase Order Number": "Purchase Order Number",
"Payment Reference": "Payment Reference",
"Invoice Date After": "Invoice Date After",
"Invoice Date Before": "Invoice Date Before",
"Include Late Fee Information": "Include Late Fee Information",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"First name of the contact": "First name of the contact",
"Last name of the contact": "Last name of the contact",
"Salutation (e.g., Mr, Mrs, Dr)": "Salutation (e.g., Mr, Mrs, Dr)",
"Email addresses for the contact": "Email addresses for the contact",
"Phone numbers for the contact": "Phone numbers for the contact",
"Website URL": "Website URL",
"Contact addresses": "Contact addresses",
"Language code (e.g., en, nl, fr)": "Language code (e.g., en, nl, fr)",
"Gender of the contact": "Gender of the contact",
"Birth date (YYYY-MM-DD format)": "Birth date (YYYY-MM-DD format)",
"International Bank Account Number": "International Bank Account Number",
"Bank Identifier Code": "Bank Identifier Code",
"National identification number": "National identification number",
"Additional notes (supports Markdown)": "Additional notes (supports Markdown)",
"Contact tags": "Contact tags",
"Custom field values": "Custom field values",
"Allow marketing emails": "Allow marketing emails",
"Select the contact to update": "Select the contact to update",
"Email addresses (replaces all existing emails)": "Email addresses (replaces all existing emails)",
"Phone numbers (replaces all existing numbers)": "Phone numbers (replaces all existing numbers)",
"Contact addresses (replaces all existing addresses)": "Contact addresses (replaces all existing addresses)",
"Contact tags (replaces all existing tags)": "Contact tags (replaces all existing tags)",
"Name of the company": "Name of the company",
"Two-letter country code (e.g., BE, NL, US) for business type selection": "Two-letter country code (e.g., BE, NL, US) for business type selection",
"Legal structure of the company": "Legal structure of the company",
"VAT/tax identification number": "VAT/tax identification number",
"Email addresses for the company": "Email addresses for the company",
"Phone numbers for the company": "Phone numbers for the company",
"Company website URL": "Company website URL",
"Company addresses": "Company addresses",
"ID of the user responsible for this company": "ID of the user responsible for this company",
"Company tags": "Company tags",
"Preferred currency for this company": "Preferred currency for this company",
"Select the company to update": "Select the company to update",
"Company addresses (replaces all existing addresses)": "Company addresses (replaces all existing addresses)",
"Company tags (replaces all existing tags)": "Company tags (replaces all existing tags)",
"Select the contact to link": "Select the contact to link",
"Select the company to link to": "Select the company to link to",
"Job title or role (e.g., CEO, Manager)": "Job title or role (e.g., CEO, Manager)",
"Is this contact a decision maker?": "Is this contact a decision maker?",
"Select the contact to unlink": "Select the contact to unlink",
"Select the company to unlink from": "Select the company to unlink from",
"Title of the deal": "Title of the deal",
"Type of customer for this deal": "Type of customer for this deal",
"Select the customer (company or contact)": "Select the customer (company or contact)",
"Contact person for this deal (for company customers)": "Contact person for this deal (for company customers)",
"Additional information about the deal": "Additional information about the deal",
"How the lead was acquired": "How the lead was acquired",
"Department responsible for this deal": "Department responsible for this deal",
"User responsible for this deal": "User responsible for this deal",
"Deal phase or stage": "Deal phase or stage",
"Deal value amount": "Deal value amount",
"Currency for the estimated value": "Currency for the estimated value",
"Win probability (0-1, e.g., 0.75 for 75%)": "Win probability (0-1, e.g., 0.75 for 75%)",
"Expected deal closing date": "Expected deal closing date",
"Select the deal to update": "Select the deal to update",
"Search by name, VAT number, emails or telephones": "Search by name, VAT number, emails or telephones",
"Filter by email address": "Filter by email address",
"Filter by VAT number": "Filter by VAT number",
"Filter by company status": "Filter by company status",
"Filter by tag names (comma-separated)": "Filter by tag names (comma-separated)",
"Only companies updated after this date": "Only companies updated after this date",
"Field to sort by": "Field to sort by",
"Sort direction": "Sort direction",
"Number of results per page (default: 20)": "Number of results per page (default: 20)",
"Page number to retrieve (default: 1)": "Page number to retrieve (default: 1)",
"Include custom field data in results": "Include custom field data in results",
"Search by first name, last name, email or telephone": "Search by first name, last name, email or telephone",
"Filter contacts by company": "Filter contacts by company",
"Filter by contact status": "Filter by contact status",
"Only contacts updated after this date": "Only contacts updated after this date",
"Search by title, reference or customer name": "Search by title, reference or customer name",
"Type of customer to filter by": "Type of customer to filter by",
"Filter deals by specific customer": "Filter deals by specific customer",
"Filter by deal phase or stage": "Filter by deal phase or stage",
"Filter by deal status (multiple selection)": "Filter by deal status (multiple selection)",
"Filter by user responsible for deals": "Filter by user responsible for deals",
"Filter by specific estimated closing date": "Filter by specific estimated closing date",
"Filter deals closing after this date (inclusive)": "Filter deals closing after this date (inclusive)",
"Filter deals closing before this date (inclusive)": "Filter deals closing before this date (inclusive)",
"Only deals updated after this date (inclusive)": "Only deals updated after this date (inclusive)",
"Only deals created before this date (inclusive)": "Only deals created before this date (inclusive)",
"Search by invoice number, purchase order number, payment reference or customer name": "Search by invoice number, purchase order number, payment reference or customer name",
"Filter by full invoice number (e.g., \"2017 / 5\")": "Filter by full invoice number (e.g., \"2017 / 5\")",
"Filter invoices by specific customer": "Filter invoices by specific customer",
"Filter by department (company entity)": "Filter by department (company entity)",
"Filter by associated deal": "Filter by associated deal",
"Filter by associated project": "Filter by associated project",
"Filter by associated subscription": "Filter by associated subscription",
"Filter by invoice status (multiple selection)": "Filter by invoice status (multiple selection)",
"Filter by purchase order number": "Filter by purchase order number",
"Filter by payment reference": "Filter by payment reference",
"Filter invoices with date after this date (inclusive)": "Filter invoices with date after this date (inclusive)",
"Filter invoices with date before this date (inclusive)": "Filter invoices with date before this date (inclusive)",
"Only invoices updated after this date": "Only invoices updated after this date",
"Include late fee and interest calculations in response": "Include late fee and interest calculations in response",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Female": "Female",
"Male": "Male",
"Non-binary": "Non-binary",
"Prefers not to say": "Prefers not to say",
"Unknown": "Unknown",
"Euro (EUR)": "Euro (EUR)",
"US Dollar (USD)": "US Dollar (USD)",
"British Pound (GBP)": "British Pound (GBP)",
"Canadian Dollar (CAD)": "Canadian Dollar (CAD)",
"Swiss Franc (CHF)": "Swiss Franc (CHF)",
"Danish Krone (DKK)": "Danish Krone (DKK)",
"Norwegian Krone (NOK)": "Norwegian Krone (NOK)",
"Swedish Krona (SEK)": "Swedish Krona (SEK)",
"Japanese Yen (JPY)": "Japanese Yen (JPY)",
"Chinese Yuan (CNY)": "Chinese Yuan (CNY)",
"Czech Koruna (CZK)": "Czech Koruna (CZK)",
"Polish Zloty (PLN)": "Polish Zloty (PLN)",
"Romanian Leu (RON)": "Romanian Leu (RON)",
"Turkish Lira (TRY)": "Turkish Lira (TRY)",
"South African Rand (ZAR)": "South African Rand (ZAR)",
"Indian Rupee (INR)": "Indian Rupee (INR)",
"Mexican Peso (MXN)": "Mexican Peso (MXN)",
"Chilean Peso (CLP)": "Chilean Peso (CLP)",
"Colombian Peso (COP)": "Colombian Peso (COP)",
"Peruvian Sol (PEN)": "Peruvian Sol (PEN)",
"Moroccan Dirham (MAD)": "Moroccan Dirham (MAD)",
"Icelandic Krona (ISK)": "Icelandic Krona (ISK)",
"Bosnia and Herzegovina Mark (BAM)": "Bosnia and Herzegovina Mark (BAM)",
"Active": "Active",
"Deactivated": "Deactivated",
"Name": "Name",
"Date Added": "Date Added",
"Date Updated": "Date Updated",
"Ascending (A-Z, Oldest First)": "Ascending (A-Z, Oldest First)",
"Descending (Z-A, Newest First)": "Descending (Z-A, Newest First)",
"Open": "Open",
"Won": "Won",
"Lost": "Lost",
"Created Date": "Created Date",
"Weighted Value": "Weighted Value",
"Ascending (Oldest First, Lowest Value)": "Ascending (Oldest First, Lowest Value)",
"Descending (Newest First, Highest Value)": "Descending (Newest First, Highest Value)",
"Draft": "Draft",
"Outstanding": "Outstanding",
"Matched": "Matched",
"Invoice Date": "Invoice Date",
"Ascending": "Ascending",
"Descending": "Descending",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Contact": "New Contact",
"New Company": "New Company",
"New Deal": "New Deal",
"Deal Won": "Deal Won",
"New Invoice": "New Invoice",
"Triggers when a new contact is created": "Triggers when a new contact is created",
"Triggers when a new company is created": "Triggers when a new company is created",
"Triggers when a new deal is created": "Triggers when a new deal is created",
"Triggers when a deal is won/accepted": "Triggers when a deal is won/accepted",
"Triggers when a new invoice is drafted": "Triggers when a new invoice is drafted"
}

View File

@@ -0,0 +1,260 @@
{
"Teamleader": "Teamleader",
"\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ": "\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Create Company": "Create Company",
"Update Company": "Update Company",
"Link Contact to Company": "Link Contact to Company",
"Unlink Contact from Company": "Unlink Contact from Company",
"Create Deal": "Create Deal",
"Update Deal": "Update Deal",
"Search Companies": "Search Companies",
"Search Contacts": "Search Contacts",
"Search Deals": "Search Deals",
"Search Invoices": "Search Invoices",
"Custom API Call": "Custom API Call",
"Create a new contact record": "Create a new contact record",
"Modify existing contact data": "Modify existing contact data",
"Add a new company record": "Add a new company record",
"Modify company information": "Modify company information",
"Associate a contact with a company": "Associate a contact with a company",
"Remove the association between contact and company": "Remove the association between contact and company",
"Create a new deal/opportunity": "Create a new deal/opportunity",
"Modify deal properties": "Modify deal properties",
"List or filter companies": "List or filter companies",
"List or filter contacts": "List or filter contacts",
"List or filter deals": "List or filter deals",
"List or filter invoices": "List or filter invoices",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"First Name": "First Name",
"Last Name": "Last Name",
"Salutation": "Salutation",
"Emails": "Emails",
"Phone Numbers": "Phone Numbers",
"Website": "Website",
"Addresses": "Addresses",
"Language": "Language",
"Gender": "Gender",
"Birth Date": "Birth Date",
"IBAN": "IBAN",
"BIC": "BIC",
"National ID Number": "National ID Number",
"Remarks": "Remarks",
"Tags": "Tags",
"Custom Fields": "Custom Fields",
"Marketing Consent": "Marketing Consent",
"Contact": "Contact",
"Company Name": "Tên công ty",
"Country Code": "Country Code",
"Business Type": "Business Type",
"VAT Number": "VAT Number",
"Responsible User ID": "Responsible User ID",
"Preferred Currency": "Preferred Currency",
"Company": "Company",
"Position": "Position",
"Decision Maker": "Decision Maker",
"Deal Title": "Deal Title",
"Customer Type": "Customer Type",
"Customer": "Customer",
"Contact Person": "Contact Person",
"Summary": "Summary",
"Source": "Source",
"Department": "Department",
"Responsible User": "Responsible User",
"Phase": "Phase",
"Estimated Value": "Estimated Value",
"Value Currency": "Value Currency",
"Estimated Probability": "Estimated Probability",
"Estimated Closing Date": "Estimated Closing Date",
"Deal": "Deal",
"Search Term": "Search Term",
"Email": "Email",
"Status": "Status",
"Updated Since": "Updated Since",
"Sort Field": "Sort Field",
"Sort Order": "Sort Order",
"Results Per Page": "Results Per Page",
"Page Number": "Page Number",
"Include Custom Fields": "Include Custom Fields",
"Deal Phase": "Deal Phase",
"Exact Closing Date": "Exact Closing Date",
"Closing Date From": "Closing Date From",
"Closing Date Until": "Closing Date Until",
"Created Before": "Created Before",
"Invoice Number": "Invoice Number",
"Project": "Project",
"Subscription": "Đăng ký",
"Purchase Order Number": "Purchase Order Number",
"Payment Reference": "Payment Reference",
"Invoice Date After": "Invoice Date After",
"Invoice Date Before": "Invoice Date Before",
"Include Late Fee Information": "Include Late Fee Information",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"First name of the contact": "First name of the contact",
"Last name of the contact": "Last name of the contact",
"Salutation (e.g., Mr, Mrs, Dr)": "Salutation (e.g., Mr, Mrs, Dr)",
"Email addresses for the contact": "Email addresses for the contact",
"Phone numbers for the contact": "Phone numbers for the contact",
"Website URL": "Website URL",
"Contact addresses": "Contact addresses",
"Language code (e.g., en, nl, fr)": "Language code (e.g., en, nl, fr)",
"Gender of the contact": "Gender of the contact",
"Birth date (YYYY-MM-DD format)": "Birth date (YYYY-MM-DD format)",
"International Bank Account Number": "International Bank Account Number",
"Bank Identifier Code": "Bank Identifier Code",
"National identification number": "National identification number",
"Additional notes (supports Markdown)": "Additional notes (supports Markdown)",
"Contact tags": "Contact tags",
"Custom field values": "Custom field values",
"Allow marketing emails": "Allow marketing emails",
"Select the contact to update": "Select the contact to update",
"Email addresses (replaces all existing emails)": "Email addresses (replaces all existing emails)",
"Phone numbers (replaces all existing numbers)": "Phone numbers (replaces all existing numbers)",
"Contact addresses (replaces all existing addresses)": "Contact addresses (replaces all existing addresses)",
"Contact tags (replaces all existing tags)": "Contact tags (replaces all existing tags)",
"Name of the company": "Name of the company",
"Two-letter country code (e.g., BE, NL, US) for business type selection": "Two-letter country code (e.g., BE, NL, US) for business type selection",
"Legal structure of the company": "Legal structure of the company",
"VAT/tax identification number": "VAT/tax identification number",
"Email addresses for the company": "Email addresses for the company",
"Phone numbers for the company": "Phone numbers for the company",
"Company website URL": "Company website URL",
"Company addresses": "Company addresses",
"ID of the user responsible for this company": "ID of the user responsible for this company",
"Company tags": "Company tags",
"Preferred currency for this company": "Preferred currency for this company",
"Select the company to update": "Select the company to update",
"Company addresses (replaces all existing addresses)": "Company addresses (replaces all existing addresses)",
"Company tags (replaces all existing tags)": "Company tags (replaces all existing tags)",
"Select the contact to link": "Select the contact to link",
"Select the company to link to": "Select the company to link to",
"Job title or role (e.g., CEO, Manager)": "Job title or role (e.g., CEO, Manager)",
"Is this contact a decision maker?": "Is this contact a decision maker?",
"Select the contact to unlink": "Select the contact to unlink",
"Select the company to unlink from": "Select the company to unlink from",
"Title of the deal": "Title of the deal",
"Type of customer for this deal": "Type of customer for this deal",
"Select the customer (company or contact)": "Select the customer (company or contact)",
"Contact person for this deal (for company customers)": "Contact person for this deal (for company customers)",
"Additional information about the deal": "Additional information about the deal",
"How the lead was acquired": "How the lead was acquired",
"Department responsible for this deal": "Department responsible for this deal",
"User responsible for this deal": "User responsible for this deal",
"Deal phase or stage": "Deal phase or stage",
"Deal value amount": "Deal value amount",
"Currency for the estimated value": "Currency for the estimated value",
"Win probability (0-1, e.g., 0.75 for 75%)": "Win probability (0-1, e.g., 0.75 for 75%)",
"Expected deal closing date": "Expected deal closing date",
"Select the deal to update": "Select the deal to update",
"Search by name, VAT number, emails or telephones": "Search by name, VAT number, emails or telephones",
"Filter by email address": "Filter by email address",
"Filter by VAT number": "Filter by VAT number",
"Filter by company status": "Filter by company status",
"Filter by tag names (comma-separated)": "Filter by tag names (comma-separated)",
"Only companies updated after this date": "Only companies updated after this date",
"Field to sort by": "Field to sort by",
"Sort direction": "Sort direction",
"Number of results per page (default: 20)": "Number of results per page (default: 20)",
"Page number to retrieve (default: 1)": "Page number to retrieve (default: 1)",
"Include custom field data in results": "Include custom field data in results",
"Search by first name, last name, email or telephone": "Search by first name, last name, email or telephone",
"Filter contacts by company": "Filter contacts by company",
"Filter by contact status": "Filter by contact status",
"Only contacts updated after this date": "Only contacts updated after this date",
"Search by title, reference or customer name": "Search by title, reference or customer name",
"Type of customer to filter by": "Type of customer to filter by",
"Filter deals by specific customer": "Filter deals by specific customer",
"Filter by deal phase or stage": "Filter by deal phase or stage",
"Filter by deal status (multiple selection)": "Filter by deal status (multiple selection)",
"Filter by user responsible for deals": "Filter by user responsible for deals",
"Filter by specific estimated closing date": "Filter by specific estimated closing date",
"Filter deals closing after this date (inclusive)": "Filter deals closing after this date (inclusive)",
"Filter deals closing before this date (inclusive)": "Filter deals closing before this date (inclusive)",
"Only deals updated after this date (inclusive)": "Only deals updated after this date (inclusive)",
"Only deals created before this date (inclusive)": "Only deals created before this date (inclusive)",
"Search by invoice number, purchase order number, payment reference or customer name": "Search by invoice number, purchase order number, payment reference or customer name",
"Filter by full invoice number (e.g., \"2017 / 5\")": "Filter by full invoice number (e.g., \"2017 / 5\")",
"Filter invoices by specific customer": "Filter invoices by specific customer",
"Filter by department (company entity)": "Filter by department (company entity)",
"Filter by associated deal": "Filter by associated deal",
"Filter by associated project": "Filter by associated project",
"Filter by associated subscription": "Filter by associated subscription",
"Filter by invoice status (multiple selection)": "Filter by invoice status (multiple selection)",
"Filter by purchase order number": "Filter by purchase order number",
"Filter by payment reference": "Filter by payment reference",
"Filter invoices with date after this date (inclusive)": "Filter invoices with date after this date (inclusive)",
"Filter invoices with date before this date (inclusive)": "Filter invoices with date before this date (inclusive)",
"Only invoices updated after this date": "Only invoices updated after this date",
"Include late fee and interest calculations in response": "Include late fee and interest calculations in response",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Female": "Female",
"Male": "Male",
"Non-binary": "Non-binary",
"Prefers not to say": "Prefers not to say",
"Unknown": "Unknown",
"Euro (EUR)": "Euro (EUR)",
"US Dollar (USD)": "US Dollar (USD)",
"British Pound (GBP)": "British Pound (GBP)",
"Canadian Dollar (CAD)": "Canadian Dollar (CAD)",
"Swiss Franc (CHF)": "Swiss Franc (CHF)",
"Danish Krone (DKK)": "Danish Krone (DKK)",
"Norwegian Krone (NOK)": "Norwegian Krone (NOK)",
"Swedish Krona (SEK)": "Swedish Krona (SEK)",
"Japanese Yen (JPY)": "Japanese Yen (JPY)",
"Chinese Yuan (CNY)": "Chinese Yuan (CNY)",
"Czech Koruna (CZK)": "Czech Koruna (CZK)",
"Polish Zloty (PLN)": "Polish Zloty (PLN)",
"Romanian Leu (RON)": "Romanian Leu (RON)",
"Turkish Lira (TRY)": "Turkish Lira (TRY)",
"South African Rand (ZAR)": "South African Rand (ZAR)",
"Indian Rupee (INR)": "Indian Rupee (INR)",
"Mexican Peso (MXN)": "Mexican Peso (MXN)",
"Chilean Peso (CLP)": "Chilean Peso (CLP)",
"Colombian Peso (COP)": "Colombian Peso (COP)",
"Peruvian Sol (PEN)": "Peruvian Sol (PEN)",
"Moroccan Dirham (MAD)": "Moroccan Dirham (MAD)",
"Icelandic Krona (ISK)": "Icelandic Krona (ISK)",
"Bosnia and Herzegovina Mark (BAM)": "Bosnia and Herzegovina Mark (BAM)",
"Active": "Tích cực",
"Deactivated": "Deactivated",
"Name": "Name",
"Date Added": "Date Added",
"Date Updated": "Date Updated",
"Ascending (A-Z, Oldest First)": "Ascending (A-Z, Oldest First)",
"Descending (Z-A, Newest First)": "Descending (Z-A, Newest First)",
"Open": "Open",
"Won": "Won",
"Lost": "Lost",
"Created Date": "Created Date",
"Weighted Value": "Weighted Value",
"Ascending (Oldest First, Lowest Value)": "Ascending (Oldest First, Lowest Value)",
"Descending (Newest First, Highest Value)": "Descending (Newest First, Highest Value)",
"Draft": "Bản nháp",
"Outstanding": "Outstanding",
"Matched": "Matched",
"Invoice Date": "Invoice Date",
"Ascending": "Tăng dần",
"Descending": "Giảm dần",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Contact": "New Contact",
"New Company": "New Company",
"New Deal": "New Deal",
"Deal Won": "Deal Won",
"New Invoice": "New Invoice",
"Triggers when a new contact is created": "Triggers when a new contact is created",
"Triggers when a new company is created": "Triggers when a new company is created",
"Triggers when a new deal is created": "Triggers when a new deal is created",
"Triggers when a deal is won/accepted": "Triggers when a deal is won/accepted",
"Triggers when a new invoice is drafted": "Triggers when a new invoice is drafted"
}

View File

@@ -0,0 +1,261 @@
{
"\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ": "\n To obtain your OAuth2 credentials:\n \n 1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)\n 2. Log in or create an account\n 3. Go to \"Build\" and click \"Create a new Integration\"\n 4. Fill in the required information\n 5. On your integration's settings page, configure:\n - Add `https://cloud.activepieces.com/redirect` to the allowed redirect URIs\n - Select all required scopes for your integration\n 6. Copy the Client ID and Client Secret\n ",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Create Company": "Create Company",
"Update Company": "Update Company",
"Link Contact to Company": "Link Contact to Company",
"Unlink Contact from Company": "Unlink Contact from Company",
"Create Deal": "Create Deal",
"Update Deal": "Update Deal",
"Search Companies": "Search Companies",
"Search Contacts": "Search Contacts",
"Search Deals": "Search Deals",
"Search Invoices": "Search Invoices",
"Custom API Call": "自定义 API 呼叫",
"Create a new contact record": "Create a new contact record",
"Modify existing contact data": "Modify existing contact data",
"Add a new company record": "Add a new company record",
"Modify company information": "Modify company information",
"Associate a contact with a company": "Associate a contact with a company",
"Remove the association between contact and company": "Remove the association between contact and company",
"Create a new deal/opportunity": "Create a new deal/opportunity",
"Modify deal properties": "Modify deal properties",
"List or filter companies": "List or filter companies",
"List or filter contacts": "List or filter contacts",
"List or filter deals": "List or filter deals",
"List or filter invoices": "List or filter invoices",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"First Name": "First Name",
"Last Name": "名字",
"Salutation": "Salutation",
"Emails": "电子邮件",
"Phone Numbers": "Phone Numbers",
"Website": "Website",
"Addresses": "Addresses",
"Language": "Language",
"Gender": "Gender",
"Birth Date": "Birth Date",
"IBAN": "IBAN",
"BIC": "BIC",
"National ID Number": "National ID Number",
"Remarks": "Remarks",
"Tags": "标签",
"Custom Fields": "Custom Fields",
"Marketing Consent": "Marketing Consent",
"Contact": "Contact",
"Company Name": "Company Name",
"Country Code": "Country Code",
"Business Type": "Business Type",
"VAT Number": "VAT Number",
"Responsible User ID": "Responsible User ID",
"Preferred Currency": "Preferred Currency",
"Company": "Company",
"Position": "Position",
"Decision Maker": "Decision Maker",
"Deal Title": "Deal Title",
"Customer Type": "Customer Type",
"Customer": "Customer",
"Contact Person": "Contact Person",
"Summary": "Summary",
"Source": "来源",
"Department": "Department",
"Responsible User": "Responsible User",
"Phase": "Phase",
"Estimated Value": "Estimated Value",
"Value Currency": "Value Currency",
"Estimated Probability": "Estimated Probability",
"Estimated Closing Date": "Estimated Closing Date",
"Deal": "Deal",
"Search Term": "Search Term",
"Email": "电子邮件地址",
"Status": "状态",
"Updated Since": "Updated Since",
"Sort Field": "Sort Field",
"Sort Order": "Sort Order",
"Results Per Page": "Results Per Page",
"Page Number": "Page Number",
"Include Custom Fields": "Include Custom Fields",
"Deal Phase": "Deal Phase",
"Exact Closing Date": "Exact Closing Date",
"Closing Date From": "Closing Date From",
"Closing Date Until": "Closing Date Until",
"Created Before": "Created Before",
"Invoice Number": "Invoice Number",
"Project": "项目",
"Subscription": "订阅",
"Purchase Order Number": "Purchase Order Number",
"Payment Reference": "Payment Reference",
"Invoice Date After": "Invoice Date After",
"Invoice Date Before": "Invoice Date Before",
"Include Late Fee Information": "Include Late Fee Information",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"First name of the contact": "First name of the contact",
"Last name of the contact": "Last name of the contact",
"Salutation (e.g., Mr, Mrs, Dr)": "Salutation (e.g., Mr, Mrs, Dr)",
"Email addresses for the contact": "Email addresses for the contact",
"Phone numbers for the contact": "Phone numbers for the contact",
"Website URL": "Website URL",
"Contact addresses": "Contact addresses",
"Language code (e.g., en, nl, fr)": "Language code (e.g., en, nl, fr)",
"Gender of the contact": "Gender of the contact",
"Birth date (YYYY-MM-DD format)": "Birth date (YYYY-MM-DD format)",
"International Bank Account Number": "International Bank Account Number",
"Bank Identifier Code": "Bank Identifier Code",
"National identification number": "National identification number",
"Additional notes (supports Markdown)": "Additional notes (supports Markdown)",
"Contact tags": "Contact tags",
"Custom field values": "Custom field values",
"Allow marketing emails": "Allow marketing emails",
"Select the contact to update": "Select the contact to update",
"Email addresses (replaces all existing emails)": "Email addresses (replaces all existing emails)",
"Phone numbers (replaces all existing numbers)": "Phone numbers (replaces all existing numbers)",
"Contact addresses (replaces all existing addresses)": "Contact addresses (replaces all existing addresses)",
"Contact tags (replaces all existing tags)": "Contact tags (replaces all existing tags)",
"Name of the company": "Name of the company",
"Two-letter country code (e.g., BE, NL, US) for business type selection": "Two-letter country code (e.g., BE, NL, US) for business type selection",
"Legal structure of the company": "Legal structure of the company",
"VAT/tax identification number": "VAT/tax identification number",
"Email addresses for the company": "Email addresses for the company",
"Phone numbers for the company": "Phone numbers for the company",
"Company website URL": "Company website URL",
"Company addresses": "Company addresses",
"ID of the user responsible for this company": "ID of the user responsible for this company",
"Company tags": "Company tags",
"Preferred currency for this company": "Preferred currency for this company",
"Select the company to update": "Select the company to update",
"Company addresses (replaces all existing addresses)": "Company addresses (replaces all existing addresses)",
"Company tags (replaces all existing tags)": "Company tags (replaces all existing tags)",
"Select the contact to link": "Select the contact to link",
"Select the company to link to": "Select the company to link to",
"Job title or role (e.g., CEO, Manager)": "Job title or role (e.g., CEO, Manager)",
"Is this contact a decision maker?": "Is this contact a decision maker?",
"Select the contact to unlink": "Select the contact to unlink",
"Select the company to unlink from": "Select the company to unlink from",
"Title of the deal": "Title of the deal",
"Type of customer for this deal": "Type of customer for this deal",
"Select the customer (company or contact)": "Select the customer (company or contact)",
"Contact person for this deal (for company customers)": "Contact person for this deal (for company customers)",
"Additional information about the deal": "Additional information about the deal",
"How the lead was acquired": "How the lead was acquired",
"Department responsible for this deal": "Department responsible for this deal",
"User responsible for this deal": "User responsible for this deal",
"Deal phase or stage": "Deal phase or stage",
"Deal value amount": "Deal value amount",
"Currency for the estimated value": "Currency for the estimated value",
"Win probability (0-1, e.g., 0.75 for 75%)": "Win probability (0-1, e.g., 0.75 for 75%)",
"Expected deal closing date": "Expected deal closing date",
"Select the deal to update": "Select the deal to update",
"Search by name, VAT number, emails or telephones": "Search by name, VAT number, emails or telephones",
"Filter by email address": "Filter by email address",
"Filter by VAT number": "Filter by VAT number",
"Filter by company status": "Filter by company status",
"Filter by tag names (comma-separated)": "Filter by tag names (comma-separated)",
"Only companies updated after this date": "Only companies updated after this date",
"Field to sort by": "Field to sort by",
"Sort direction": "Sort direction",
"Number of results per page (default: 20)": "Number of results per page (default: 20)",
"Page number to retrieve (default: 1)": "Page number to retrieve (default: 1)",
"Include custom field data in results": "Include custom field data in results",
"Search by first name, last name, email or telephone": "Search by first name, last name, email or telephone",
"Filter contacts by company": "Filter contacts by company",
"Filter by contact status": "Filter by contact status",
"Only contacts updated after this date": "Only contacts updated after this date",
"Search by title, reference or customer name": "Search by title, reference or customer name",
"Type of customer to filter by": "Type of customer to filter by",
"Filter deals by specific customer": "Filter deals by specific customer",
"Filter by deal phase or stage": "Filter by deal phase or stage",
"Filter by deal status (multiple selection)": "Filter by deal status (multiple selection)",
"Filter by user responsible for deals": "Filter by user responsible for deals",
"Filter by specific estimated closing date": "Filter by specific estimated closing date",
"Filter deals closing after this date (inclusive)": "Filter deals closing after this date (inclusive)",
"Filter deals closing before this date (inclusive)": "Filter deals closing before this date (inclusive)",
"Only deals updated after this date (inclusive)": "Only deals updated after this date (inclusive)",
"Only deals created before this date (inclusive)": "Only deals created before this date (inclusive)",
"Search by invoice number, purchase order number, payment reference or customer name": "Search by invoice number, purchase order number, payment reference or customer name",
"Filter by full invoice number (e.g., \"2017 / 5\")": "Filter by full invoice number (e.g., \"2017 / 5\")",
"Filter invoices by specific customer": "Filter invoices by specific customer",
"Filter by department (company entity)": "Filter by department (company entity)",
"Filter by associated deal": "Filter by associated deal",
"Filter by associated project": "Filter by associated project",
"Filter by associated subscription": "Filter by associated subscription",
"Filter by invoice status (multiple selection)": "Filter by invoice status (multiple selection)",
"Filter by purchase order number": "Filter by purchase order number",
"Filter by payment reference": "Filter by payment reference",
"Filter invoices with date after this date (inclusive)": "Filter invoices with date after this date (inclusive)",
"Filter invoices with date before this date (inclusive)": "Filter invoices with date before this date (inclusive)",
"Only invoices updated after this date": "Only invoices updated after this date",
"Include late fee and interest calculations in response": "Include late fee and interest calculations in response",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Female": "Female",
"Male": "Male",
"Non-binary": "Non-binary",
"Prefers not to say": "Prefers not to say",
"Unknown": "未知的",
"Euro (EUR)": "Euro (EUR)",
"US Dollar (USD)": "US Dollar (USD)",
"British Pound (GBP)": "British Pound (GBP)",
"Canadian Dollar (CAD)": "Canadian Dollar (CAD)",
"Swiss Franc (CHF)": "Swiss Franc (CHF)",
"Danish Krone (DKK)": "Danish Krone (DKK)",
"Norwegian Krone (NOK)": "Norwegian Krone (NOK)",
"Swedish Krona (SEK)": "Swedish Krona (SEK)",
"Japanese Yen (JPY)": "Japanese Yen (JPY)",
"Chinese Yuan (CNY)": "Chinese Yuan (CNY)",
"Czech Koruna (CZK)": "Czech Koruna (CZK)",
"Polish Zloty (PLN)": "Polish Zloty (PLN)",
"Romanian Leu (RON)": "Romanian Leu (RON)",
"Turkish Lira (TRY)": "Turkish Lira (TRY)",
"South African Rand (ZAR)": "South African Rand (ZAR)",
"Indian Rupee (INR)": "Indian Rupee (INR)",
"Mexican Peso (MXN)": "Mexican Peso (MXN)",
"Chilean Peso (CLP)": "Chilean Peso (CLP)",
"Colombian Peso (COP)": "Colombian Peso (COP)",
"Peruvian Sol (PEN)": "Peruvian Sol (PEN)",
"Moroccan Dirham (MAD)": "Moroccan Dirham (MAD)",
"Icelandic Krona (ISK)": "Icelandic Krona (ISK)",
"Bosnia and Herzegovina Mark (BAM)": "Bosnia and Herzegovina Mark (BAM)",
"Active": "使用中",
"Deactivated": "已停用",
"Name": "名称",
"Date Added": "Date Added",
"Date Updated": "Date Updated",
"Ascending (A-Z, Oldest First)": "Ascending (A-Z, Oldest First)",
"Descending (Z-A, Newest First)": "Descending (Z-A, Newest First)",
"Open": "Open",
"Won": "Won",
"Lost": "Lost",
"Created Date": "Created Date",
"Weighted Value": "Weighted Value",
"Ascending (Oldest First, Lowest Value)": "Ascending (Oldest First, Lowest Value)",
"Descending (Newest First, Highest Value)": "Descending (Newest First, Highest Value)",
"Draft": "草稿",
"Outstanding": "Outstanding",
"Matched": "Matched",
"Invoice Date": "Invoice Date",
"Ascending": "升序",
"Descending": "降序",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色",
"New Contact": "New Contact",
"New Company": "New Company",
"New Deal": "New Deal",
"Deal Won": "Deal Won",
"New Invoice": "New Invoice",
"Triggers when a new contact is created": "Triggers when a new contact is created",
"Triggers when a new company is created": "Triggers when a new company is created",
"Triggers when a new deal is created": "Triggers when a new deal is created",
"Triggers when a deal is won/accepted": "Triggers when a deal is won/accepted",
"Triggers when a new invoice is drafted": "Triggers when a new invoice is drafted"
}

View File

@@ -0,0 +1,53 @@
import { createCustomApiCallAction } from '@activepieces/pieces-common';
import { createPiece } from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { teamleaderAuth } from './lib/common/auth';
import { createContact } from './lib/actions/create-contact';
import { updateContact } from './lib/actions/update-contact';
import { createCompany } from './lib/actions/create-company';
import { updateCompany } from './lib/actions/update-company';
import { linkContactToCompany } from './lib/actions/link-contact-to-company';
import { unlinkContactFromCompany } from './lib/actions/unlink-contact-from-company';
import { createDeal } from './lib/actions/create-deal';
import { updateDeal } from './lib/actions/update-deal';
import { searchCompanies } from './lib/actions/search-companies';
import { searchContacts } from './lib/actions/search-contacts';
import { searchDeals } from './lib/actions/search-deals';
import { searchInvoices } from './lib/actions/search-invoices';
import { newContact } from './lib/triggers/new-contact';
import { newCompany } from './lib/triggers/new-company';
import { newDeal } from './lib/triggers/new-deal';
import { dealAccepted } from './lib/triggers/deal-accepted';
import { newInvoice } from './lib/triggers/new-invoice';
export const teamleader = createPiece({
displayName: 'Teamleader',
minimumSupportedRelease: '0.36.1',
logoUrl: 'https://cdn.activepieces.com/pieces/teamleader.png',
categories: [PieceCategory.SALES_AND_CRM, PieceCategory.BUSINESS_INTELLIGENCE],
authors: ['owuzo','onyedikachi-david'],
auth: teamleaderAuth,
actions: [
createContact,
updateContact,
createCompany,
updateCompany,
linkContactToCompany,
unlinkContactFromCompany,
createDeal,
updateDeal,
searchCompanies,
searchContacts,
searchDeals,
searchInvoices,
createCustomApiCallAction({
baseUrl: () => 'https://api.focus.teamleader.eu',
auth: teamleaderAuth,
authMapping: async (auth) => ({
Authorization: `Bearer ${auth.access_token}`,
}),
}),
],
triggers: [newContact, newCompany, newDeal, dealAccepted, newInvoice],
});

View File

@@ -0,0 +1,330 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const createCompany = createAction({
name: 'create_company',
displayName: 'Create Company',
description: 'Add a new company record',
auth: teamleaderAuth,
props: {
name: Property.ShortText({
displayName: 'Company Name',
description: 'Name of the company',
required: true,
}),
country_for_business_type: Property.ShortText({
displayName: 'Country Code',
description: 'Two-letter country code (e.g., BE, NL, US) for business type selection',
required: false,
}),
business_type_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Business Type',
description: 'Legal structure of the company',
required: false,
refreshers: ['country_for_business_type'],
options: async ({ auth, country_for_business_type }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
if (!country_for_business_type) return {
disabled: true,
options: [],
placeholder: 'Please select a country first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/businessTypes.list',
body: {
country: country_for_business_type
}
});
return {
disabled: false,
options: response.body.data.map((businessType: any) => ({
label: businessType.name,
value: businessType.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading business types'
};
}
}
}),
vat_number: Property.ShortText({
displayName: 'VAT Number',
description: 'VAT/tax identification number',
required: false,
}),
national_identification_number: Property.ShortText({
displayName: 'National ID Number',
description: 'National identification number',
required: false,
}),
emails: Property.Array({
displayName: 'Emails',
description: 'Email addresses for the company',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Type',
required: true,
options: {
options: [
{ label: 'Primary', value: 'primary' },
{ label: 'Invoicing', value: 'invoicing' }
]
}
}),
email: Property.ShortText({
displayName: 'Email Address',
required: true,
})
}
}),
telephones: Property.Array({
displayName: 'Phone Numbers',
description: 'Phone numbers for the company',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Type',
required: true,
options: {
options: [
{ label: 'Phone', value: 'phone' },
{ label: 'Fax', value: 'fax' }
]
}
}),
number: Property.ShortText({
displayName: 'Phone Number',
required: true,
})
}
}),
website: Property.ShortText({
displayName: 'Website',
description: 'Company website URL',
required: false,
}),
addresses: Property.Array({
displayName: 'Addresses',
description: 'Company addresses',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Address Type',
required: true,
options: {
options: [
{ label: 'Primary', value: 'primary' },
{ label: 'Invoicing', value: 'invoicing' },
{ label: 'Delivery', value: 'delivery' },
{ label: 'Visiting', value: 'visiting' }
]
}
}),
line_1: Property.ShortText({
displayName: 'Address Line 1',
required: true,
}),
postal_code: Property.ShortText({
displayName: 'Postal Code',
required: true,
}),
city: Property.ShortText({
displayName: 'City',
required: true,
}),
country: Property.ShortText({
displayName: 'Country Code',
description: 'Two-letter country code (e.g., BE, US, NL)',
required: true,
}),
area_level_two_id: Property.ShortText({
displayName: 'Area Level Two ID',
description: 'Optional area identifier',
required: false,
}),
addressee: Property.ShortText({
displayName: 'Addressee',
description: 'Name/company for this address',
required: false,
})
}
}),
iban: Property.ShortText({
displayName: 'IBAN',
description: 'International Bank Account Number',
required: false,
}),
bic: Property.ShortText({
displayName: 'BIC',
description: 'Bank Identifier Code',
required: false,
}),
language: Property.ShortText({
displayName: 'Language',
description: 'Language code (e.g., en, nl, fr)',
required: false,
}),
responsible_user_id: Property.ShortText({
displayName: 'Responsible User ID',
description: 'ID of the user responsible for this company',
required: false,
}),
remarks: Property.LongText({
displayName: 'Remarks',
description: 'Additional notes (supports Markdown)',
required: false,
}),
tags: Property.Array({
displayName: 'Tags',
description: 'Company tags',
required: false,
properties: {
tag: Property.ShortText({
displayName: 'Tag',
required: true,
})
}
}),
custom_fields: Property.Array({
displayName: 'Custom Fields',
description: 'Custom field values',
required: false,
properties: {
id: Property.ShortText({
displayName: 'Field ID',
description: 'Custom field identifier',
required: true,
}),
value: Property.ShortText({
displayName: 'Value',
description: 'Field value (string, number, or boolean)',
required: true,
})
}
}),
marketing_mails_consent: Property.Checkbox({
displayName: 'Marketing Consent',
description: 'Allow marketing emails',
required: false,
}),
preferred_currency: Property.StaticDropdown({
displayName: 'Preferred Currency',
description: 'Preferred currency for this company',
required: false,
options: {
options: [
{ label: 'Euro (EUR)', value: 'EUR' },
{ label: 'US Dollar (USD)', value: 'USD' },
{ label: 'British Pound (GBP)', value: 'GBP' },
{ label: 'Canadian Dollar (CAD)', value: 'CAD' },
{ label: 'Swiss Franc (CHF)', value: 'CHF' },
{ label: 'Danish Krone (DKK)', value: 'DKK' },
{ label: 'Norwegian Krone (NOK)', value: 'NOK' },
{ label: 'Swedish Krona (SEK)', value: 'SEK' },
{ label: 'Japanese Yen (JPY)', value: 'JPY' },
{ label: 'Chinese Yuan (CNY)', value: 'CNY' },
{ label: 'Czech Koruna (CZK)', value: 'CZK' },
{ label: 'Polish Zloty (PLN)', value: 'PLN' },
{ label: 'Romanian Leu (RON)', value: 'RON' },
{ label: 'Turkish Lira (TRY)', value: 'TRY' },
{ label: 'South African Rand (ZAR)', value: 'ZAR' },
{ label: 'Indian Rupee (INR)', value: 'INR' },
{ label: 'Mexican Peso (MXN)', value: 'MXN' },
{ label: 'Chilean Peso (CLP)', value: 'CLP' },
{ label: 'Colombian Peso (COP)', value: 'COP' },
{ label: 'Peruvian Sol (PEN)', value: 'PEN' },
{ label: 'Moroccan Dirham (MAD)', value: 'MAD' },
{ label: 'Icelandic Krona (ISK)', value: 'ISK' },
{ label: 'Bosnia and Herzegovina Mark (BAM)', value: 'BAM' }
]
}
}),
},
async run(context) {
const company: Record<string, any> = {
name: context.propsValue.name,
};
if (context.propsValue.business_type_id) company['business_type_id'] = context.propsValue.business_type_id;
if (context.propsValue.vat_number) company['vat_number'] = context.propsValue.vat_number;
if (context.propsValue.national_identification_number) {
company['national_identification_number'] = context.propsValue.national_identification_number;
}
if (context.propsValue.website) company['website'] = context.propsValue.website;
if (context.propsValue.iban) company['iban'] = context.propsValue.iban;
if (context.propsValue.bic) company['bic'] = context.propsValue.bic;
if (context.propsValue.language) company['language'] = context.propsValue.language;
if (context.propsValue.responsible_user_id) company['responsible_user_id'] = context.propsValue.responsible_user_id;
if (context.propsValue.remarks) company['remarks'] = context.propsValue.remarks;
if (context.propsValue.marketing_mails_consent !== undefined) {
company['marketing_mails_consent'] = context.propsValue.marketing_mails_consent;
}
if (context.propsValue.preferred_currency) company['preferred_currency'] = context.propsValue.preferred_currency;
if (context.propsValue.emails && context.propsValue.emails.length > 0) {
company['emails'] = context.propsValue.emails.map((emailObj: any) => ({
type: emailObj.type,
email: emailObj.email
}));
}
if (context.propsValue.telephones && context.propsValue.telephones.length > 0) {
company['telephones'] = context.propsValue.telephones.map((phoneObj: any) => ({
type: phoneObj.type,
number: phoneObj.number
}));
}
if (context.propsValue.addresses && context.propsValue.addresses.length > 0) {
company['addresses'] = context.propsValue.addresses.map((addressObj: any) => ({
type: addressObj.type,
address: {
line_1: addressObj.line_1 || null,
postal_code: addressObj.postal_code || null,
city: addressObj.city || null,
country: addressObj.country,
...(addressObj.area_level_two_id && { area_level_two_id: addressObj.area_level_two_id }),
...(addressObj.addressee && { addressee: addressObj.addressee })
}
}));
}
if (context.propsValue.tags && context.propsValue.tags.length > 0) {
company['tags'] = context.propsValue.tags.map((tagObj: any) => tagObj.tag);
}
if (context.propsValue.custom_fields && context.propsValue.custom_fields.length > 0) {
company['custom_fields'] = context.propsValue.custom_fields.map((fieldObj: any) => ({
id: fieldObj.id,
value: fieldObj.value
}));
}
const response = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/companies.add',
body: company
});
return response.body;
},
});

View File

@@ -0,0 +1,268 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const createContact = createAction({
name: 'create_contact',
displayName: 'Create Contact',
description: 'Create a new contact record',
auth: teamleaderAuth,
props: {
first_name: Property.ShortText({
displayName: 'First Name',
description: 'First name of the contact',
required: true,
}),
last_name: Property.ShortText({
displayName: 'Last Name',
description: 'Last name of the contact',
required: true,
}),
salutation: Property.ShortText({
displayName: 'Salutation',
description: 'Salutation (e.g., Mr, Mrs, Dr)',
required: false,
}),
emails: Property.Array({
displayName: 'Emails',
description: 'Email addresses for the contact',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Type',
required: true,
options: {
options: [
{ label: 'Primary', value: 'primary' }
]
}
}),
email: Property.ShortText({
displayName: 'Email Address',
required: true,
})
}
}),
telephones: Property.Array({
displayName: 'Phone Numbers',
description: 'Phone numbers for the contact',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Type',
required: true,
options: {
options: [
{ label: 'Phone', value: 'phone' },
{ label: 'Mobile', value: 'mobile' },
{ label: 'Fax', value: 'fax' }
]
}
}),
number: Property.ShortText({
displayName: 'Phone Number',
required: true,
})
}
}),
website: Property.ShortText({
displayName: 'Website',
description: 'Website URL',
required: false,
}),
addresses: Property.Array({
displayName: 'Addresses',
description: 'Contact addresses',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Address Type',
required: true,
options: {
options: [
{ label: 'Primary', value: 'primary' },
{ label: 'Invoicing', value: 'invoicing' },
{ label: 'Delivery', value: 'delivery' },
{ label: 'Visiting', value: 'visiting' }
]
}
}),
line_1: Property.ShortText({
displayName: 'Address Line 1',
required: true,
}),
postal_code: Property.ShortText({
displayName: 'Postal Code',
required: true,
}),
city: Property.ShortText({
displayName: 'City',
required: true,
}),
country: Property.ShortText({
displayName: 'Country Code',
description: 'Two-letter country code (e.g., BE, US, NL)',
required: true,
}),
area_level_two_id: Property.ShortText({
displayName: 'Area Level Two ID',
description: 'Optional area identifier',
required: false,
}),
addressee: Property.ShortText({
displayName: 'Addressee',
description: 'Name/company for this address',
required: false,
})
}
}),
language: Property.ShortText({
displayName: 'Language',
description: 'Language code (e.g., en, nl, fr)',
required: false,
}),
gender: Property.StaticDropdown({
displayName: 'Gender',
description: 'Gender of the contact',
required: false,
options: {
options: [
{ label: 'Female', value: 'female' },
{ label: 'Male', value: 'male' },
{ label: 'Non-binary', value: 'non_binary' },
{ label: 'Prefers not to say', value: 'prefers_not_to_say' },
{ label: 'Unknown', value: 'unknown' },
],
},
}),
birthdate: Property.ShortText({
displayName: 'Birth Date',
description: 'Birth date (YYYY-MM-DD format)',
required: false,
}),
iban: Property.ShortText({
displayName: 'IBAN',
description: 'International Bank Account Number',
required: false,
}),
bic: Property.ShortText({
displayName: 'BIC',
description: 'Bank Identifier Code',
required: false,
}),
national_identification_number: Property.ShortText({
displayName: 'National ID Number',
description: 'National identification number',
required: false,
}),
remarks: Property.LongText({
displayName: 'Remarks',
description: 'Additional notes (supports Markdown)',
required: false,
}),
tags: Property.Array({
displayName: 'Tags',
description: 'Contact tags',
required: false,
properties: {
tag: Property.ShortText({
displayName: 'Tag',
required: true,
})
}
}),
custom_fields: Property.Array({
displayName: 'Custom Fields',
description: 'Custom field values',
required: false,
properties: {
id: Property.ShortText({
displayName: 'Field ID',
description: 'Custom field identifier',
required: true,
}),
value: Property.ShortText({
displayName: 'Value',
description: 'Field value (string, number, or boolean)',
required: true,
})
}
}),
marketing_mails_consent: Property.Checkbox({
displayName: 'Marketing Consent',
description: 'Allow marketing emails',
required: false,
}),
},
async run(context) {
const contact: Record<string, any> = {
first_name: context.propsValue.first_name,
last_name: context.propsValue.last_name,
};
if (context.propsValue.salutation) contact['salutation'] = context.propsValue.salutation;
if (context.propsValue.website) contact['website'] = context.propsValue.website;
if (context.propsValue.language) contact['language'] = context.propsValue.language;
if (context.propsValue.gender) contact['gender'] = context.propsValue.gender;
if (context.propsValue.birthdate) contact['birthdate'] = context.propsValue.birthdate;
if (context.propsValue.iban) contact['iban'] = context.propsValue.iban;
if (context.propsValue.bic) contact['bic'] = context.propsValue.bic;
if (context.propsValue.national_identification_number) {
contact['national_identification_number'] = context.propsValue.national_identification_number;
}
if (context.propsValue.remarks) contact['remarks'] = context.propsValue.remarks;
if (context.propsValue.marketing_mails_consent !== undefined) {
contact['marketing_mails_consent'] = context.propsValue.marketing_mails_consent;
}
if (context.propsValue.emails && context.propsValue.emails.length > 0) {
contact['emails'] = context.propsValue.emails.map((emailObj: any) => ({
type: emailObj.type,
email: emailObj.email
}));
}
if (context.propsValue.telephones && context.propsValue.telephones.length > 0) {
contact['telephones'] = context.propsValue.telephones.map((phoneObj: any) => ({
type: phoneObj.type,
number: phoneObj.number
}));
}
// Handle addresses array
if (context.propsValue.addresses && context.propsValue.addresses.length > 0) {
contact['addresses'] = context.propsValue.addresses.map((addressObj: any) => ({
type: addressObj.type,
address: {
line_1: addressObj.line_1 || null,
postal_code: addressObj.postal_code || null,
city: addressObj.city || null,
country: addressObj.country,
...(addressObj.area_level_two_id && { area_level_two_id: addressObj.area_level_two_id }),
...(addressObj.addressee && { addressee: addressObj.addressee })
}
}));
}
if (context.propsValue.tags && context.propsValue.tags.length > 0) {
contact['tags'] = context.propsValue.tags.map((tagObj: any) => tagObj.tag);
}
if (context.propsValue.custom_fields && context.propsValue.custom_fields.length > 0) {
contact['custom_fields'] = context.propsValue.custom_fields.map((fieldObj: any) => ({
id: fieldObj.id,
value: fieldObj.value
}));
}
const response = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/contacts.add',
body: contact
});
return response.body;
},
});

View File

@@ -0,0 +1,402 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const createDeal = createAction({
name: 'create_deal',
displayName: 'Create Deal',
description: 'Create a new deal/opportunity',
auth: teamleaderAuth,
props: {
title: Property.ShortText({
displayName: 'Deal Title',
description: 'Title of the deal',
required: true,
}),
customer_type: Property.StaticDropdown({
displayName: 'Customer Type',
description: 'Type of customer for this deal',
required: true,
options: {
options: [
{ label: 'Company', value: 'company' },
{ label: 'Contact', value: 'contact' }
]
}
}),
customer_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Customer',
description: 'Select the customer (company or contact)',
required: true,
refreshers: ['customer_type'],
options: async ({ auth, customer_type }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
if (!customer_type) return {
disabled: true,
options: [],
placeholder: 'Please select customer type first'
};
try {
if (customer_type === 'company') {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/companies.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((company: any) => ({
label: company.name,
value: company.id
}))
};
} else {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/contacts.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((contact: any) => ({
label: `${contact.first_name} ${contact.last_name || ''}`.trim(),
value: contact.id
}))
};
}
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading customers'
};
}
}
}),
contact_person_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Contact Person',
description: 'Contact person for this deal (for company customers)',
required: false,
refreshers: ['customer_type', 'customer_id'],
options: async ({ auth, customer_type, customer_id }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
if (customer_type !== 'company' || !customer_id) return {
disabled: true,
options: [],
placeholder: 'Only available for company customers'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/companies.info',
body: {
id: customer_id,
includes: 'related_contacts'
}
});
const relatedContacts = response.body.data.related_contacts || [];
return {
disabled: false,
options: relatedContacts.map((contact: any) => ({
label: `${contact.first_name} ${contact.last_name || ''}`.trim(),
value: contact.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading contacts'
};
}
}
}),
summary: Property.LongText({
displayName: 'Summary',
description: 'Additional information about the deal',
required: false,
}),
source_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Source',
description: 'How the lead was acquired',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/dealSources.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((source: any) => ({
label: source.name,
value: source.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading sources'
};
}
}
}),
department_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Department',
description: 'Department responsible for this deal',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/departments.list',
body: {
filter: {
status: ['active']
}
}
});
return {
disabled: false,
options: response.body.data.map((department: any) => ({
label: department.name,
value: department.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading departments'
};
}
}
}),
responsible_user_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Responsible User',
description: 'User responsible for this deal',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/users.list',
body: {
filter: {
status: ['active']
}
}
});
return {
disabled: false,
options: response.body.data.map((user: any) => ({
label: `${user.first_name} ${user.last_name}`,
value: user.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading users'
};
}
}
}),
phase_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Phase',
description: 'Deal phase or stage',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/dealPhases.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((phase: any) => ({
label: phase.name,
value: phase.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading phases'
};
}
}
}),
estimated_value_amount: Property.Number({
displayName: 'Estimated Value',
description: 'Deal value amount',
required: false,
}),
estimated_value_currency: Property.StaticDropdown({
displayName: 'Value Currency',
description: 'Currency for the estimated value',
required: false,
options: {
options: [
{ label: 'Euro (EUR)', value: 'EUR' },
{ label: 'US Dollar (USD)', value: 'USD' },
{ label: 'British Pound (GBP)', value: 'GBP' },
{ label: 'Canadian Dollar (CAD)', value: 'CAD' },
{ label: 'Swiss Franc (CHF)', value: 'CHF' },
{ label: 'Danish Krone (DKK)', value: 'DKK' },
{ label: 'Norwegian Krone (NOK)', value: 'NOK' },
{ label: 'Swedish Krona (SEK)', value: 'SEK' },
{ label: 'Japanese Yen (JPY)', value: 'JPY' },
{ label: 'Chinese Yuan (CNY)', value: 'CNY' }
]
}
}),
estimated_probability: Property.Number({
displayName: 'Estimated Probability',
description: 'Win probability (0-1, e.g., 0.75 for 75%)',
required: false,
}),
estimated_closing_date: Property.DateTime({
displayName: 'Estimated Closing Date',
description: 'Expected deal closing date',
required: false,
}),
custom_fields: Property.Array({
displayName: 'Custom Fields',
description: 'Custom field values',
required: false,
properties: {
id: Property.ShortText({
displayName: 'Field ID',
description: 'Custom field identifier',
required: true,
}),
value: Property.ShortText({
displayName: 'Value',
description: 'Field value',
required: true,
})
}
}),
},
async run(context) {
const deal: Record<string, any> = {
lead: {
customer: {
type: context.propsValue.customer_type,
id: context.propsValue.customer_id
}
},
title: context.propsValue.title
};
if (context.propsValue.contact_person_id) {
deal['lead']['contact_person_id'] = context.propsValue.contact_person_id;
}
if (context.propsValue.summary) deal['summary'] = context.propsValue.summary;
if (context.propsValue.source_id) deal['source_id'] = context.propsValue.source_id;
if (context.propsValue.department_id) deal['department_id'] = context.propsValue.department_id;
if (context.propsValue.responsible_user_id) deal['responsible_user_id'] = context.propsValue.responsible_user_id;
if (context.propsValue.phase_id) deal['phase_id'] = context.propsValue.phase_id;
if (context.propsValue.estimated_value_amount && context.propsValue.estimated_value_currency) {
deal['estimated_value'] = {
amount: context.propsValue.estimated_value_amount,
currency: context.propsValue.estimated_value_currency
};
}
if (context.propsValue.estimated_probability !== undefined) {
deal['estimated_probability'] = context.propsValue.estimated_probability;
}
if (context.propsValue.estimated_closing_date) {
const closingDate = new Date(context.propsValue.estimated_closing_date);
deal['estimated_closing_date'] = closingDate.toISOString().split('T')[0];
}
if (context.propsValue.custom_fields && context.propsValue.custom_fields.length > 0) {
deal['custom_fields'] = context.propsValue.custom_fields.map((fieldObj: any) => ({
id: fieldObj.id,
value: fieldObj.value
}));
}
const response = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/deals.create',
body: deal
});
return response.body;
},
});

View File

@@ -0,0 +1,125 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const linkContactToCompany = createAction({
name: 'link_contact_to_company',
displayName: 'Link Contact to Company',
description: 'Associate a contact with a company',
auth: teamleaderAuth,
props: {
contact_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Contact',
description: 'Select the contact to link',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/contacts.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((contact: any) => ({
label: `${contact.first_name} ${contact.last_name || ''}`.trim(),
value: contact.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading contacts'
};
}
}
}),
company_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Company',
description: 'Select the company to link to',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/companies.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((company: any) => ({
label: company.name,
value: company.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading companies'
};
}
}
}),
position: Property.ShortText({
displayName: 'Position',
description: 'Job title or role (e.g., CEO, Manager)',
required: false
}),
decision_maker: Property.Checkbox({
displayName: 'Decision Maker',
description: 'Is this contact a decision maker?',
required: false
})
},
async run(context) {
const linkData: Record<string, any> = {
id: context.propsValue.contact_id,
company_id: context.propsValue.company_id,
};
if (context.propsValue.position) {
linkData['position'] = context.propsValue.position;
}
if (context.propsValue.decision_maker !== undefined) {
linkData['decision_maker'] = context.propsValue.decision_maker;
}
await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/contacts.linkToCompany',
body: linkData
});
return {
success: true,
message: 'Contact linked to company successfully',
contact_id: context.propsValue.contact_id,
company_id: context.propsValue.company_id
};
},
});

View File

@@ -0,0 +1,161 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const searchCompanies = createAction({
name: 'search_companies',
displayName: 'Search Companies',
description: 'List or filter companies',
auth: teamleaderAuth,
props: {
term: Property.ShortText({
displayName: 'Search Term',
description: 'Search by name, VAT number, emails or telephones',
required: false,
}),
email: Property.ShortText({
displayName: 'Email',
description: 'Filter by email address',
required: false,
}),
vat_number: Property.ShortText({
displayName: 'VAT Number',
description: 'Filter by VAT number',
required: false,
}),
status: Property.StaticDropdown({
displayName: 'Status',
description: 'Filter by company status',
required: false,
options: {
options: [
{ label: 'Active', value: 'active' },
{ label: 'Deactivated', value: 'deactivated' }
]
}
}),
tags: Property.ShortText({
displayName: 'Tags',
description: 'Filter by tag names (comma-separated)',
required: false,
}),
updated_since: Property.DateTime({
displayName: 'Updated Since',
description: 'Only companies updated after this date',
required: false,
}),
sort_field: Property.StaticDropdown({
displayName: 'Sort Field',
description: 'Field to sort by',
required: false,
options: {
options: [
{ label: 'Name', value: 'name' },
{ label: 'Date Added', value: 'added_at' },
{ label: 'Date Updated', value: 'updated_at' }
]
}
}),
sort_order: Property.StaticDropdown({
displayName: 'Sort Order',
description: 'Sort direction',
required: false,
options: {
options: [
{ label: 'Ascending (A-Z, Oldest First)', value: 'asc' },
{ label: 'Descending (Z-A, Newest First)', value: 'desc' }
]
}
}),
page_size: Property.Number({
displayName: 'Results Per Page',
description: 'Number of results per page (default: 20)',
required: false,
}),
page_number: Property.Number({
displayName: 'Page Number',
description: 'Page number to retrieve (default: 1)',
required: false,
}),
include_custom_fields: Property.Checkbox({
displayName: 'Include Custom Fields',
description: 'Include custom field data in results',
required: false,
}),
},
async run(context) {
const requestBody: Record<string, any> = {};
const filter: Record<string, any> = {};
if (context.propsValue.term) {
filter['term'] = context.propsValue.term;
}
if (context.propsValue.email) {
filter['email'] = {
type: 'primary',
email: context.propsValue.email
};
}
if (context.propsValue.vat_number) {
filter['vat_number'] = context.propsValue.vat_number;
}
if (context.propsValue.status) {
filter['status'] = context.propsValue.status;
}
if (context.propsValue.tags) {
const tagList = context.propsValue.tags.split(',').map(tag => tag.trim()).filter(tag => tag);
if (tagList.length > 0) {
filter['tags'] = tagList;
}
}
if (context.propsValue.updated_since) {
const updatedSince = new Date(context.propsValue.updated_since);
filter['updated_since'] = updatedSince.toISOString();
}
if (Object.keys(filter).length > 0) {
requestBody['filter'] = filter;
}
const page: Record<string, number> = {};
if (context.propsValue.page_size) {
page['size'] = context.propsValue.page_size;
}
if (context.propsValue.page_number) {
page['number'] = context.propsValue.page_number;
}
if (Object.keys(page).length > 0) {
requestBody['page'] = page;
}
if (context.propsValue.sort_field && context.propsValue.sort_order) {
requestBody['sort'] = [{
field: context.propsValue.sort_field,
order: context.propsValue.sort_order
}];
}
if (context.propsValue.include_custom_fields) {
requestBody['includes'] = 'custom_fields';
}
const response = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/companies.list',
body: requestBody
});
return response.body;
},
});

View File

@@ -0,0 +1,194 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const searchContacts = createAction({
name: 'search_contacts',
displayName: 'Search Contacts',
description: 'List or filter contacts',
auth: teamleaderAuth,
props: {
term: Property.ShortText({
displayName: 'Search Term',
description: 'Search by first name, last name, email or telephone',
required: false,
}),
email: Property.ShortText({
displayName: 'Email',
description: 'Filter by email address',
required: false,
}),
company_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Company',
description: 'Filter contacts by company',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/companies.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((company: any) => ({
label: company.name,
value: company.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading companies'
};
}
}
}),
status: Property.StaticDropdown({
displayName: 'Status',
description: 'Filter by contact status',
required: false,
options: {
options: [
{ label: 'Active', value: 'active' },
{ label: 'Deactivated', value: 'deactivated' }
]
}
}),
tags: Property.ShortText({
displayName: 'Tags',
description: 'Filter by tag names (comma-separated)',
required: false,
}),
updated_since: Property.DateTime({
displayName: 'Updated Since',
description: 'Only contacts updated after this date',
required: false,
}),
sort_field: Property.StaticDropdown({
displayName: 'Sort Field',
description: 'Field to sort by',
required: false,
options: {
options: [
{ label: 'Name', value: 'name' },
{ label: 'Date Added', value: 'added_at' },
{ label: 'Date Updated', value: 'updated_at' }
]
}
}),
sort_order: Property.StaticDropdown({
displayName: 'Sort Order',
description: 'Sort direction',
required: false,
options: {
options: [
{ label: 'Ascending (A-Z, Oldest First)', value: 'asc' },
{ label: 'Descending (Z-A, Newest First)', value: 'desc' }
]
}
}),
page_size: Property.Number({
displayName: 'Results Per Page',
description: 'Number of results per page (default: 20)',
required: false,
}),
page_number: Property.Number({
displayName: 'Page Number',
description: 'Page number to retrieve (default: 1)',
required: false,
}),
include_custom_fields: Property.Checkbox({
displayName: 'Include Custom Fields',
description: 'Include custom field data in results',
required: false,
}),
},
async run(context) {
const requestBody: Record<string, any> = {};
const filter: Record<string, any> = {};
if (context.propsValue.term) {
filter['term'] = context.propsValue.term;
}
if (context.propsValue.email) {
filter['email'] = {
type: 'primary',
email: context.propsValue.email
};
}
if (context.propsValue.company_id) {
filter['company_id'] = context.propsValue.company_id;
}
if (context.propsValue.status) {
filter['status'] = context.propsValue.status;
}
if (context.propsValue.tags) {
const tagList = context.propsValue.tags.split(',').map(tag => tag.trim()).filter(tag => tag);
if (tagList.length > 0) {
filter['tags'] = tagList;
}
}
if (context.propsValue.updated_since) {
const updatedSince = new Date(context.propsValue.updated_since);
filter['updated_since'] = updatedSince.toISOString();
}
// Add filter to request body if any filters are specified
if (Object.keys(filter).length > 0) {
requestBody['filter'] = filter;
}
const page: Record<string, number> = {};
if (context.propsValue.page_size) {
page['size'] = context.propsValue.page_size;
}
if (context.propsValue.page_number) {
page['number'] = context.propsValue.page_number;
}
if (Object.keys(page).length > 0) {
requestBody['page'] = page;
}
if (context.propsValue.sort_field && context.propsValue.sort_order) {
requestBody['sort'] = [{
field: context.propsValue.sort_field,
order: context.propsValue.sort_order
}];
}
if (context.propsValue.include_custom_fields) {
requestBody['includes'] = 'custom_fields';
}
const response = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/contacts.list',
body: requestBody
});
return response.body;
},
});

View File

@@ -0,0 +1,332 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const searchDeals = createAction({
name: 'search_deals',
displayName: 'Search Deals',
description: 'List or filter deals',
auth: teamleaderAuth,
props: {
term: Property.ShortText({
displayName: 'Search Term',
description: 'Search by title, reference or customer name',
required: false,
}),
customer_type: Property.StaticDropdown({
displayName: 'Customer Type',
description: 'Type of customer to filter by',
required: false,
options: {
options: [
{ label: 'Company', value: 'company' },
{ label: 'Contact', value: 'contact' }
]
}
}),
customer_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Customer',
description: 'Filter deals by specific customer',
required: false,
refreshers: ['customer_type'],
options: async ({ auth, customer_type }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
if (!customer_type) return {
disabled: true,
options: [],
placeholder: 'Please select customer type first'
};
try {
if (customer_type === 'company') {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/companies.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((company: any) => ({
label: company.name,
value: company.id
}))
};
} else {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/contacts.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((contact: any) => ({
label: `${contact.first_name} ${contact.last_name || ''}`.trim(),
value: contact.id
}))
};
}
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading customers'
};
}
}
}),
phase_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Deal Phase',
description: 'Filter by deal phase or stage',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/dealPhases.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((phase: any) => ({
label: phase.name,
value: phase.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading phases'
};
}
}
}),
status: Property.StaticMultiSelectDropdown({
displayName: 'Status',
description: 'Filter by deal status (multiple selection)',
required: false,
options: {
options: [
{ label: 'Open', value: 'open' },
{ label: 'Won', value: 'won' },
{ label: 'Lost', value: 'lost' }
]
}
}),
responsible_user_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Responsible User',
description: 'Filter by user responsible for deals',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/users.list',
body: {
filter: {
status: ['active']
}
}
});
return {
disabled: false,
options: response.body.data.map((user: any) => ({
label: `${user.first_name} ${user.last_name}`,
value: user.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading users'
};
}
}
}),
estimated_closing_date: Property.DateTime({
displayName: 'Exact Closing Date',
description: 'Filter by specific estimated closing date',
required: false,
}),
estimated_closing_date_from: Property.DateTime({
displayName: 'Closing Date From',
description: 'Filter deals closing after this date (inclusive)',
required: false,
}),
estimated_closing_date_until: Property.DateTime({
displayName: 'Closing Date Until',
description: 'Filter deals closing before this date (inclusive)',
required: false,
}),
updated_since: Property.DateTime({
displayName: 'Updated Since',
description: 'Only deals updated after this date (inclusive)',
required: false,
}),
created_before: Property.DateTime({
displayName: 'Created Before',
description: 'Only deals created before this date (inclusive)',
required: false,
}),
sort_field: Property.StaticDropdown({
displayName: 'Sort Field',
description: 'Field to sort by',
required: false,
options: {
options: [
{ label: 'Created Date', value: 'created_at' },
{ label: 'Weighted Value', value: 'weighted_value' }
]
}
}),
sort_order: Property.StaticDropdown({
displayName: 'Sort Order',
description: 'Sort direction',
required: false,
options: {
options: [
{ label: 'Ascending (Oldest First, Lowest Value)', value: 'asc' },
{ label: 'Descending (Newest First, Highest Value)', value: 'desc' }
]
}
}),
page_size: Property.Number({
displayName: 'Results Per Page',
description: 'Number of results per page (default: 20)',
required: false,
}),
page_number: Property.Number({
displayName: 'Page Number',
description: 'Page number to retrieve (default: 1)',
required: false,
}),
include_custom_fields: Property.Checkbox({
displayName: 'Include Custom Fields',
description: 'Include custom field data in results',
required: false,
}),
},
async run(context) {
const requestBody: Record<string, any> = {};
const filter: Record<string, any> = {};
if (context.propsValue.term) {
filter['term'] = context.propsValue.term;
}
if (context.propsValue.customer_type && context.propsValue.customer_id) {
filter['customer'] = {
type: context.propsValue.customer_type,
id: context.propsValue.customer_id
};
}
if (context.propsValue.phase_id) {
filter['phase_id'] = context.propsValue.phase_id;
}
if (context.propsValue.status && context.propsValue.status.length > 0) {
filter['status'] = context.propsValue.status;
}
if (context.propsValue.responsible_user_id) {
filter['responsible_user_id'] = context.propsValue.responsible_user_id;
}
if (context.propsValue.estimated_closing_date) {
const closingDate = new Date(context.propsValue.estimated_closing_date);
filter['estimated_closing_date'] = closingDate.toISOString().split('T')[0];
}
if (context.propsValue.estimated_closing_date_from) {
const fromDate = new Date(context.propsValue.estimated_closing_date_from);
filter['estimated_closing_date_from'] = fromDate.toISOString().split('T')[0];
}
if (context.propsValue.estimated_closing_date_until) {
const untilDate = new Date(context.propsValue.estimated_closing_date_until);
filter['estimated_closing_date_until'] = untilDate.toISOString().split('T')[0];
}
if (context.propsValue.updated_since) {
const updatedSince = new Date(context.propsValue.updated_since);
filter['updated_since'] = updatedSince.toISOString();
}
if (context.propsValue.created_before) {
const createdBefore = new Date(context.propsValue.created_before);
filter['created_before'] = createdBefore.toISOString();
}
if (Object.keys(filter).length > 0) {
requestBody['filter'] = filter;
}
const page: Record<string, number> = {};
if (context.propsValue.page_size) {
page['size'] = context.propsValue.page_size;
}
if (context.propsValue.page_number) {
page['number'] = context.propsValue.page_number;
}
if (Object.keys(page).length > 0) {
requestBody['page'] = page;
}
if (context.propsValue.sort_field && context.propsValue.sort_order) {
requestBody['sort'] = [{
field: context.propsValue.sort_field,
order: context.propsValue.sort_order
}];
}
if (context.propsValue.include_custom_fields) {
requestBody['includes'] = 'custom_fields';
}
const response = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/deals.list',
body: requestBody
});
return response.body;
},
});

View File

@@ -0,0 +1,421 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const searchInvoices = createAction({
name: 'search_invoices',
displayName: 'Search Invoices',
description: 'List or filter invoices',
auth: teamleaderAuth,
props: {
term: Property.ShortText({
displayName: 'Search Term',
description: 'Search by invoice number, purchase order number, payment reference or customer name',
required: false,
}),
invoice_number: Property.ShortText({
displayName: 'Invoice Number',
description: 'Filter by full invoice number (e.g., "2017 / 5")',
required: false,
}),
customer_type: Property.StaticDropdown({
displayName: 'Customer Type',
description: 'Type of customer to filter by',
required: false,
options: {
options: [
{ label: 'Company', value: 'company' },
{ label: 'Contact', value: 'contact' }
]
}
}),
customer_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Customer',
description: 'Filter invoices by specific customer',
required: false,
refreshers: ['customer_type'],
options: async ({ auth, customer_type }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
if (!customer_type) return {
disabled: true,
options: [],
placeholder: 'Please select customer type first'
};
try {
if (customer_type === 'company') {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/companies.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((company: any) => ({
label: company.name,
value: company.id
}))
};
} else {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/contacts.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((contact: any) => ({
label: `${contact.first_name} ${contact.last_name || ''}`.trim(),
value: contact.id
}))
};
}
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading customers'
};
}
}
}),
department_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Department',
description: 'Filter by department (company entity)',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/departments.list',
body: {
filter: {
status: ['active']
}
}
});
return {
disabled: false,
options: response.body.data.map((department: any) => ({
label: department.name,
value: department.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading departments'
};
}
}
}),
deal_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Deal',
description: 'Filter by associated deal',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/deals.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((deal: any) => ({
label: deal.title,
value: deal.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading deals'
};
}
}
}),
project_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Project',
description: 'Filter by associated project',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/projects.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((project: any) => ({
label: project.title,
value: project.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading projects'
};
}
}
}),
subscription_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Subscription',
description: 'Filter by associated subscription',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/subscriptions.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((subscription: any) => ({
label: subscription.title || subscription.reference,
value: subscription.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading subscriptions'
};
}
}
}),
status: Property.StaticMultiSelectDropdown({
displayName: 'Status',
description: 'Filter by invoice status (multiple selection)',
required: false,
options: {
options: [
{ label: 'Draft', value: 'draft' },
{ label: 'Outstanding', value: 'outstanding' },
{ label: 'Matched', value: 'matched' }
]
}
}),
purchase_order_number: Property.ShortText({
displayName: 'Purchase Order Number',
description: 'Filter by purchase order number',
required: false,
}),
payment_reference: Property.ShortText({
displayName: 'Payment Reference',
description: 'Filter by payment reference',
required: false,
}),
invoice_date_after: Property.DateTime({
displayName: 'Invoice Date After',
description: 'Filter invoices with date after this date (inclusive)',
required: false,
}),
invoice_date_before: Property.DateTime({
displayName: 'Invoice Date Before',
description: 'Filter invoices with date before this date (inclusive)',
required: false,
}),
updated_since: Property.DateTime({
displayName: 'Updated Since',
description: 'Only invoices updated after this date',
required: false,
}),
sort_field: Property.StaticDropdown({
displayName: 'Sort Field',
description: 'Field to sort by',
required: false,
options: {
options: [
{ label: 'Invoice Number', value: 'invoice_number' },
{ label: 'Invoice Date', value: 'invoice_date' }
]
}
}),
sort_order: Property.StaticDropdown({
displayName: 'Sort Order',
description: 'Sort direction',
required: false,
options: {
options: [
{ label: 'Ascending', value: 'asc' },
{ label: 'Descending', value: 'desc' }
]
}
}),
page_size: Property.Number({
displayName: 'Results Per Page',
description: 'Number of results per page (default: 20)',
required: false,
}),
page_number: Property.Number({
displayName: 'Page Number',
description: 'Page number to retrieve (default: 1)',
required: false,
}),
include_late_fees: Property.Checkbox({
displayName: 'Include Late Fee Information',
description: 'Include late fee and interest calculations in response',
required: false,
}),
},
async run(context) {
const requestBody: Record<string, any> = {};
const filter: Record<string, any> = {};
if (context.propsValue.term) {
filter['term'] = context.propsValue.term;
}
if (context.propsValue.invoice_number) {
filter['invoice_number'] = context.propsValue.invoice_number;
}
if (context.propsValue.customer_type && context.propsValue.customer_id) {
filter['customer'] = {
type: context.propsValue.customer_type,
id: context.propsValue.customer_id
};
}
if (context.propsValue.department_id) {
filter['department_id'] = context.propsValue.department_id;
}
if (context.propsValue.deal_id) {
filter['deal_id'] = context.propsValue.deal_id;
}
if (context.propsValue.project_id) {
filter['project_id'] = context.propsValue.project_id;
}
if (context.propsValue.subscription_id) {
filter['subscription_id'] = context.propsValue.subscription_id;
}
if (context.propsValue.status && context.propsValue.status.length > 0) {
filter['status'] = context.propsValue.status;
}
if (context.propsValue.purchase_order_number) {
filter['purchase_order_number'] = context.propsValue.purchase_order_number;
}
if (context.propsValue.payment_reference) {
filter['payment_reference'] = context.propsValue.payment_reference;
}
if (context.propsValue.invoice_date_after) {
const afterDate = new Date(context.propsValue.invoice_date_after);
filter['invoice_date_after'] = afterDate.toISOString().split('T')[0];
}
if (context.propsValue.invoice_date_before) {
const beforeDate = new Date(context.propsValue.invoice_date_before);
filter['invoice_date_before'] = beforeDate.toISOString().split('T')[0];
}
if (context.propsValue.updated_since) {
const updatedSince = new Date(context.propsValue.updated_since);
filter['updated_since'] = updatedSince.toISOString();
}
if (Object.keys(filter).length > 0) {
requestBody['filter'] = filter;
}
const page: Record<string, number> = {};
if (context.propsValue.page_size) {
page['size'] = context.propsValue.page_size;
}
if (context.propsValue.page_number) {
page['number'] = context.propsValue.page_number;
}
if (Object.keys(page).length > 0) {
requestBody['page'] = page;
}
if (context.propsValue.sort_field && context.propsValue.sort_order) {
requestBody['sort'] = [{
field: context.propsValue.sort_field,
order: context.propsValue.sort_order
}];
}
if (context.propsValue.include_late_fees) {
requestBody['includes'] = 'late_fees';
}
const response = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/invoices.list',
body: requestBody
});
return response.body;
},
});

View File

@@ -0,0 +1,105 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const unlinkContactFromCompany = createAction({
name: 'unlink_contact_from_company',
displayName: 'Unlink Contact from Company',
description: 'Remove the association between contact and company',
auth: teamleaderAuth,
props: {
contact_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Contact',
description: 'Select the contact to unlink',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/contacts.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((contact: any) => ({
label: `${contact.first_name} ${contact.last_name || ''}`.trim(),
value: contact.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading contacts'
};
}
}
}),
company_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Company',
description: 'Select the company to unlink from',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/companies.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((company: any) => ({
label: company.name,
value: company.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading companies'
};
}
}
}),
},
async run(context) {
await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/contacts.unlinkFromCompany',
body: {
id: context.propsValue.contact_id,
company_id: context.propsValue.company_id
}
});
return {
success: true,
message: 'Contact unlinked from company successfully',
contact_id: context.propsValue.contact_id,
company_id: context.propsValue.company_id
};
},
});

View File

@@ -0,0 +1,373 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const updateCompany = createAction({
name: 'update_company',
displayName: 'Update Company',
description: 'Modify company information',
auth: teamleaderAuth,
props: {
company_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Company',
description: 'Select the company to update',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/companies.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((company: any) => ({
label: company.name,
value: company.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading companies'
};
}
}
}),
name: Property.ShortText({
displayName: 'Company Name',
description: 'Name of the company',
required: false,
}),
country_for_business_type: Property.ShortText({
displayName: 'Country Code',
description: 'Two-letter country code (e.g., BE, NL, US) for business type selection',
required: false,
}),
business_type_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Business Type',
description: 'Legal structure of the company',
required: false,
refreshers: ['country_for_business_type'],
options: async ({ auth, country_for_business_type }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
if (!country_for_business_type) return {
disabled: true,
options: [],
placeholder: 'Please select a country first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/businessTypes.list',
body: {
country: country_for_business_type
}
});
return {
disabled: false,
options: response.body.data.map((businessType: any) => ({
label: businessType.name,
value: businessType.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading business types'
};
}
}
}),
vat_number: Property.ShortText({
displayName: 'VAT Number',
description: 'VAT/tax identification number',
required: false,
}),
national_identification_number: Property.ShortText({
displayName: 'National ID Number',
description: 'National identification number',
required: false,
}),
emails: Property.Array({
displayName: 'Emails',
description: 'Email addresses (replaces all existing emails)',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Type',
required: true,
options: {
options: [
{ label: 'Primary', value: 'primary' },
{ label: 'Invoicing', value: 'invoicing' }
]
}
}),
email: Property.ShortText({
displayName: 'Email Address',
required: true,
})
}
}),
telephones: Property.Array({
displayName: 'Phone Numbers',
description: 'Phone numbers (replaces all existing numbers)',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Type',
required: true,
options: {
options: [
{ label: 'Phone', value: 'phone' },
{ label: 'Fax', value: 'fax' }
]
}
}),
number: Property.ShortText({
displayName: 'Phone Number',
required: true,
})
}
}),
website: Property.ShortText({
displayName: 'Website',
description: 'Company website URL',
required: false,
}),
addresses: Property.Array({
displayName: 'Addresses',
description: 'Company addresses (replaces all existing addresses)',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Address Type',
required: true,
options: {
options: [
{ label: 'Primary', value: 'primary' },
{ label: 'Invoicing', value: 'invoicing' },
{ label: 'Delivery', value: 'delivery' },
{ label: 'Visiting', value: 'visiting' }
]
}
}),
line_1: Property.ShortText({
displayName: 'Address Line 1',
required: true,
}),
postal_code: Property.ShortText({
displayName: 'Postal Code',
required: true,
}),
city: Property.ShortText({
displayName: 'City',
required: true,
}),
country: Property.ShortText({
displayName: 'Country Code',
description: 'Two-letter country code (e.g., BE, US, NL)',
required: true,
}),
area_level_two_id: Property.ShortText({
displayName: 'Area Level Two ID',
description: 'Optional area identifier',
required: false,
}),
addressee: Property.ShortText({
displayName: 'Addressee',
description: 'Name/company for this address',
required: false,
})
}
}),
iban: Property.ShortText({
displayName: 'IBAN',
description: 'International Bank Account Number',
required: false,
}),
bic: Property.ShortText({
displayName: 'BIC',
description: 'Bank Identifier Code',
required: false,
}),
language: Property.ShortText({
displayName: 'Language',
description: 'Language code (e.g., en, nl, fr)',
required: false,
}),
responsible_user_id: Property.ShortText({
displayName: 'Responsible User ID',
description: 'ID of the user responsible for this company',
required: false,
}),
remarks: Property.LongText({
displayName: 'Remarks',
description: 'Additional notes (supports Markdown)',
required: false,
}),
tags: Property.Array({
displayName: 'Tags',
description: 'Company tags (replaces all existing tags)',
required: false,
properties: {
tag: Property.ShortText({
displayName: 'Tag',
required: true,
})
}
}),
custom_fields: Property.Array({
displayName: 'Custom Fields',
description: 'Custom field values',
required: false,
properties: {
id: Property.ShortText({
displayName: 'Field ID',
description: 'Custom field identifier',
required: true,
}),
value: Property.ShortText({
displayName: 'Value',
description: 'Field value (string, number, or boolean)',
required: true,
})
}
}),
marketing_mails_consent: Property.Checkbox({
displayName: 'Marketing Consent',
description: 'Allow marketing emails',
required: false,
}),
preferred_currency: Property.StaticDropdown({
displayName: 'Preferred Currency',
description: 'Preferred currency for this company',
required: false,
options: {
options: [
{ label: 'Euro (EUR)', value: 'EUR' },
{ label: 'US Dollar (USD)', value: 'USD' },
{ label: 'British Pound (GBP)', value: 'GBP' },
{ label: 'Canadian Dollar (CAD)', value: 'CAD' },
{ label: 'Swiss Franc (CHF)', value: 'CHF' },
{ label: 'Danish Krone (DKK)', value: 'DKK' },
{ label: 'Norwegian Krone (NOK)', value: 'NOK' },
{ label: 'Swedish Krona (SEK)', value: 'SEK' },
{ label: 'Japanese Yen (JPY)', value: 'JPY' },
{ label: 'Chinese Yuan (CNY)', value: 'CNY' },
{ label: 'Czech Koruna (CZK)', value: 'CZK' },
{ label: 'Polish Zloty (PLN)', value: 'PLN' },
{ label: 'Romanian Leu (RON)', value: 'RON' },
{ label: 'Turkish Lira (TRY)', value: 'TRY' },
{ label: 'South African Rand (ZAR)', value: 'ZAR' },
{ label: 'Indian Rupee (INR)', value: 'INR' },
{ label: 'Mexican Peso (MXN)', value: 'MXN' },
{ label: 'Chilean Peso (CLP)', value: 'CLP' },
{ label: 'Colombian Peso (COP)', value: 'COP' },
{ label: 'Peruvian Sol (PEN)', value: 'PEN' },
{ label: 'Moroccan Dirham (MAD)', value: 'MAD' },
{ label: 'Icelandic Krona (ISK)', value: 'ISK' },
{ label: 'Bosnia and Herzegovina Mark (BAM)', value: 'BAM' }
]
}
}),
},
async run(context) {
const updateData: Record<string, any> = {
id: context.propsValue.company_id,
};
// Add basic string fields that are provided
if (context.propsValue.name !== undefined) updateData['name'] = context.propsValue.name;
if (context.propsValue.business_type_id !== undefined) updateData['business_type_id'] = context.propsValue.business_type_id;
if (context.propsValue.vat_number !== undefined) updateData['vat_number'] = context.propsValue.vat_number;
if (context.propsValue.national_identification_number !== undefined) {
updateData['national_identification_number'] = context.propsValue.national_identification_number;
}
if (context.propsValue.website !== undefined) updateData['website'] = context.propsValue.website;
if (context.propsValue.iban !== undefined) updateData['iban'] = context.propsValue.iban;
if (context.propsValue.bic !== undefined) updateData['bic'] = context.propsValue.bic;
if (context.propsValue.language !== undefined) updateData['language'] = context.propsValue.language;
if (context.propsValue.responsible_user_id !== undefined) updateData['responsible_user_id'] = context.propsValue.responsible_user_id;
if (context.propsValue.remarks !== undefined) updateData['remarks'] = context.propsValue.remarks;
if (context.propsValue.marketing_mails_consent !== undefined) {
updateData['marketing_mails_consent'] = context.propsValue.marketing_mails_consent;
}
if (context.propsValue.preferred_currency !== undefined) updateData['preferred_currency'] = context.propsValue.preferred_currency;
if (context.propsValue.emails !== undefined) {
updateData['emails'] = context.propsValue.emails.map((emailObj: any) => ({
type: emailObj.type,
email: emailObj.email
}));
}
if (context.propsValue.telephones !== undefined) {
updateData['telephones'] = context.propsValue.telephones.map((phoneObj: any) => ({
type: phoneObj.type,
number: phoneObj.number
}));
}
if (context.propsValue.addresses !== undefined) {
updateData['addresses'] = context.propsValue.addresses.map((addressObj: any) => ({
type: addressObj.type,
address: {
line_1: addressObj.line_1 || null,
postal_code: addressObj.postal_code || null,
city: addressObj.city || null,
country: addressObj.country,
...(addressObj.area_level_two_id && { area_level_two_id: addressObj.area_level_two_id }),
...(addressObj.addressee && { addressee: addressObj.addressee })
}
}));
}
if (context.propsValue.tags !== undefined) {
updateData['tags'] = context.propsValue.tags.map((tagObj: any) => tagObj.tag);
}
if (context.propsValue.custom_fields !== undefined) {
updateData['custom_fields'] = context.propsValue.custom_fields.map((fieldObj: any) => ({
id: fieldObj.id,
value: fieldObj.value
}));
}
await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/companies.update',
body: updateData
});
return {
success: true,
message: 'Company updated successfully',
company_id: context.propsValue.company_id
};
},
});

View File

@@ -0,0 +1,309 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const updateContact = createAction({
name: 'update_contact',
displayName: 'Update Contact',
description: 'Modify existing contact data',
auth: teamleaderAuth,
props: {
contact_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Contact',
description: 'Select the contact to update',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/contacts.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((contact: any) => ({
label: `${contact.first_name} ${contact.last_name || ''}`.trim(),
value: contact.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading contacts'
};
}
}
}),
first_name: Property.ShortText({
displayName: 'First Name',
description: 'First name of the contact',
required: false,
}),
last_name: Property.ShortText({
displayName: 'Last Name',
description: 'Last name of the contact',
required: false,
}),
salutation: Property.ShortText({
displayName: 'Salutation',
description: 'Salutation (e.g., Mr, Mrs, Dr)',
required: false,
}),
emails: Property.Array({
displayName: 'Emails',
description: 'Email addresses (replaces all existing emails)',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Type',
required: true,
options: {
options: [
{ label: 'Primary', value: 'primary' }
]
}
}),
email: Property.ShortText({
displayName: 'Email Address',
required: true,
})
}
}),
telephones: Property.Array({
displayName: 'Phone Numbers',
description: 'Phone numbers (replaces all existing numbers)',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Type',
required: true,
options: {
options: [
{ label: 'Phone', value: 'phone' },
{ label: 'Mobile', value: 'mobile' },
{ label: 'Fax', value: 'fax' }
]
}
}),
number: Property.ShortText({
displayName: 'Phone Number',
required: true,
})
}
}),
website: Property.ShortText({
displayName: 'Website',
description: 'Website URL',
required: false,
}),
addresses: Property.Array({
displayName: 'Addresses',
description: 'Contact addresses (replaces all existing addresses)',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Address Type',
required: true,
options: {
options: [
{ label: 'Primary', value: 'primary' },
{ label: 'Invoicing', value: 'invoicing' },
{ label: 'Delivery', value: 'delivery' },
{ label: 'Visiting', value: 'visiting' }
]
}
}),
line_1: Property.ShortText({
displayName: 'Address Line 1',
required: true,
}),
postal_code: Property.ShortText({
displayName: 'Postal Code',
required: true,
}),
city: Property.ShortText({
displayName: 'City',
required: true,
}),
country: Property.ShortText({
displayName: 'Country Code',
description: 'Two-letter country code (e.g., BE, US, NL)',
required: true,
}),
area_level_two_id: Property.ShortText({
displayName: 'Area Level Two ID',
description: 'Optional area identifier',
required: false,
}),
addressee: Property.ShortText({
displayName: 'Addressee',
description: 'Name/company for this address',
required: false,
})
}
}),
language: Property.ShortText({
displayName: 'Language',
description: 'Language code (e.g., en, nl, fr)',
required: false,
}),
gender: Property.StaticDropdown({
displayName: 'Gender',
description: 'Gender of the contact',
required: false,
options: {
options: [
{ label: 'Female', value: 'female' },
{ label: 'Male', value: 'male' },
{ label: 'Non-binary', value: 'non_binary' },
{ label: 'Prefers not to say', value: 'prefers_not_to_say' },
{ label: 'Unknown', value: 'unknown' },
],
},
}),
birthdate: Property.ShortText({
displayName: 'Birth Date',
description: 'Birth date (YYYY-MM-DD format)',
required: false,
}),
iban: Property.ShortText({
displayName: 'IBAN',
description: 'International Bank Account Number',
required: false,
}),
bic: Property.ShortText({
displayName: 'BIC',
description: 'Bank Identifier Code',
required: false,
}),
national_identification_number: Property.ShortText({
displayName: 'National ID Number',
description: 'National identification number',
required: false,
}),
remarks: Property.LongText({
displayName: 'Remarks',
description: 'Additional notes (supports Markdown)',
required: false,
}),
tags: Property.Array({
displayName: 'Tags',
description: 'Contact tags (replaces all existing tags)',
required: false,
properties: {
tag: Property.ShortText({
displayName: 'Tag',
required: true,
})
}
}),
custom_fields: Property.Array({
displayName: 'Custom Fields',
description: 'Custom field values',
required: false,
properties: {
id: Property.ShortText({
displayName: 'Field ID',
description: 'Custom field identifier',
required: true,
}),
value: Property.ShortText({
displayName: 'Value',
description: 'Field value (string, number, or boolean)',
required: true,
})
}
}),
marketing_mails_consent: Property.Checkbox({
displayName: 'Marketing Consent',
description: 'Allow marketing emails',
required: false,
}),
},
async run(context) {
const updateData: Record<string, any> = {
id: context.propsValue.contact_id,
};
if (context.propsValue.first_name !== undefined) updateData['first_name'] = context.propsValue.first_name;
if (context.propsValue.last_name !== undefined) updateData['last_name'] = context.propsValue.last_name;
if (context.propsValue.salutation !== undefined) updateData['salutation'] = context.propsValue.salutation;
if (context.propsValue.website !== undefined) updateData['website'] = context.propsValue.website;
if (context.propsValue.language !== undefined) updateData['language'] = context.propsValue.language;
if (context.propsValue.gender !== undefined) updateData['gender'] = context.propsValue.gender;
if (context.propsValue.birthdate !== undefined) updateData['birthdate'] = context.propsValue.birthdate;
if (context.propsValue.iban !== undefined) updateData['iban'] = context.propsValue.iban;
if (context.propsValue.bic !== undefined) updateData['bic'] = context.propsValue.bic;
if (context.propsValue.national_identification_number !== undefined) {
updateData['national_identification_number'] = context.propsValue.national_identification_number;
}
if (context.propsValue.remarks !== undefined) updateData['remarks'] = context.propsValue.remarks;
if (context.propsValue.marketing_mails_consent !== undefined) {
updateData['marketing_mails_consent'] = context.propsValue.marketing_mails_consent;
}
if (context.propsValue.emails !== undefined) {
updateData['emails'] = context.propsValue.emails.map((emailObj: any) => ({
type: emailObj.type,
email: emailObj.email
}));
}
if (context.propsValue.telephones !== undefined) {
updateData['telephones'] = context.propsValue.telephones.map((phoneObj: any) => ({
type: phoneObj.type,
number: phoneObj.number
}));
}
if (context.propsValue.addresses !== undefined) {
updateData['addresses'] = context.propsValue.addresses.map((addressObj: any) => ({
type: addressObj.type,
address: {
line_1: addressObj.line_1 || null,
postal_code: addressObj.postal_code || null,
city: addressObj.city || null,
country: addressObj.country,
...(addressObj.area_level_two_id && { area_level_two_id: addressObj.area_level_two_id }),
...(addressObj.addressee && { addressee: addressObj.addressee })
}
}));
}
if (context.propsValue.tags !== undefined) {
updateData['tags'] = context.propsValue.tags.map((tagObj: any) => tagObj.tag);
}
if (context.propsValue.custom_fields !== undefined) {
updateData['custom_fields'] = context.propsValue.custom_fields.map((fieldObj: any) => ({
id: fieldObj.id,
value: fieldObj.value
}));
}
await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/contacts.update',
body: updateData
});
return {
success: true,
message: 'Contact updated successfully',
contact_id: context.propsValue.contact_id
};
},
});

View File

@@ -0,0 +1,408 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamleaderAuth } from '../common/auth';
import { teamleaderCommon } from '../common/client';
export const updateDeal = createAction({
name: 'update_deal',
displayName: 'Update Deal',
description: 'Modify deal properties',
auth: teamleaderAuth,
props: {
deal_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Deal',
description: 'Select the deal to update',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/deals.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((deal: any) => ({
label: deal.title,
value: deal.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading deals'
};
}
}
}),
title: Property.ShortText({
displayName: 'Deal Title',
description: 'Title of the deal',
required: false,
}),
customer_type: Property.StaticDropdown({
displayName: 'Customer Type',
description: 'Type of customer for this deal',
required: false,
options: {
options: [
{ label: 'Company', value: 'company' },
{ label: 'Contact', value: 'contact' }
]
}
}),
customer_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Customer',
description: 'Select the customer (company or contact)',
required: false,
refreshers: ['customer_type'],
options: async ({ auth, customer_type }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
if (!customer_type) return {
disabled: true,
options: [],
placeholder: 'Please select customer type first'
};
try {
if (customer_type === 'company') {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/companies.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((company: any) => ({
label: company.name,
value: company.id
}))
};
} else {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/contacts.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((contact: any) => ({
label: `${contact.first_name} ${contact.last_name || ''}`.trim(),
value: contact.id
}))
};
}
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading customers'
};
}
}
}),
contact_person_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Contact Person',
description: 'Contact person for this deal (for company customers)',
required: false,
refreshers: ['customer_type', 'customer_id'],
options: async ({ auth, customer_type, customer_id }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
if (customer_type !== 'company' || !customer_id) return {
disabled: true,
options: [],
placeholder: 'Only available for company customers'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/companies.info',
body: {
id: customer_id,
includes: 'related_contacts'
}
});
const relatedContacts = response.body.data.related_contacts || [];
return {
disabled: false,
options: relatedContacts.map((contact: any) => ({
label: `${contact.first_name} ${contact.last_name || ''}`.trim(),
value: contact.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading contacts'
};
}
}
}),
summary: Property.LongText({
displayName: 'Summary',
description: 'Additional information about the deal',
required: false,
}),
source_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Source',
description: 'How the lead was acquired',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/dealSources.list',
body: {}
});
return {
disabled: false,
options: response.body.data.map((source: any) => ({
label: source.name,
value: source.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading sources'
};
}
}
}),
department_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Department',
description: 'Department responsible for this deal',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/departments.list',
body: {
filter: {
status: ['active']
}
}
});
return {
disabled: false,
options: response.body.data.map((department: any) => ({
label: department.name,
value: department.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading departments'
};
}
}
}),
responsible_user_id: Property.Dropdown({
auth:teamleaderAuth,
displayName: 'Responsible User',
description: 'User responsible for this deal',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) return {
disabled: true,
options: [],
placeholder: 'Please authenticate first'
};
try {
const response = await teamleaderCommon.apiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/users.list',
body: {
filter: {
status: ['active']
}
}
});
return {
disabled: false,
options: response.body.data.map((user: any) => ({
label: `${user.first_name} ${user.last_name}`,
value: user.id
}))
};
} catch (error) {
return {
disabled: true,
options: [],
placeholder: 'Error loading users'
};
}
}
}),
estimated_value_amount: Property.Number({
displayName: 'Estimated Value',
description: 'Deal value amount',
required: false,
}),
estimated_value_currency: Property.StaticDropdown({
displayName: 'Value Currency',
description: 'Currency for the estimated value',
required: false,
options: {
options: [
{ label: 'Euro (EUR)', value: 'EUR' },
{ label: 'US Dollar (USD)', value: 'USD' },
{ label: 'British Pound (GBP)', value: 'GBP' },
{ label: 'Canadian Dollar (CAD)', value: 'CAD' },
{ label: 'Swiss Franc (CHF)', value: 'CHF' },
{ label: 'Danish Krone (DKK)', value: 'DKK' },
{ label: 'Norwegian Krone (NOK)', value: 'NOK' },
{ label: 'Swedish Krona (SEK)', value: 'SEK' },
{ label: 'Japanese Yen (JPY)', value: 'JPY' },
{ label: 'Chinese Yuan (CNY)', value: 'CNY' }
]
}
}),
estimated_probability: Property.Number({
displayName: 'Estimated Probability',
description: 'Win probability (0-1, e.g., 0.75 for 75%)',
required: false,
}),
estimated_closing_date: Property.DateTime({
displayName: 'Estimated Closing Date',
description: 'Expected deal closing date',
required: false,
}),
custom_fields: Property.Array({
displayName: 'Custom Fields',
description: 'Custom field values',
required: false,
properties: {
id: Property.ShortText({
displayName: 'Field ID',
description: 'Custom field identifier',
required: true,
}),
value: Property.ShortText({
displayName: 'Value',
description: 'Field value',
required: true,
})
}
}),
},
async run(context) {
const dealUpdate: Record<string, any> = {
id: context.propsValue.deal_id,
};
if (context.propsValue.customer_type && context.propsValue.customer_id) {
dealUpdate['lead'] = {
customer: {
type: context.propsValue.customer_type,
id: context.propsValue.customer_id
}
};
if (context.propsValue.contact_person_id) {
dealUpdate['lead']['contact_person_id'] = context.propsValue.contact_person_id;
}
}
if (context.propsValue.title !== undefined) dealUpdate['title'] = context.propsValue.title;
if (context.propsValue.summary !== undefined) dealUpdate['summary'] = context.propsValue.summary;
if (context.propsValue.source_id !== undefined) dealUpdate['source_id'] = context.propsValue.source_id;
if (context.propsValue.department_id !== undefined) dealUpdate['department_id'] = context.propsValue.department_id;
if (context.propsValue.responsible_user_id !== undefined) dealUpdate['responsible_user_id'] = context.propsValue.responsible_user_id;
if (context.propsValue.estimated_value_amount !== undefined && context.propsValue.estimated_value_currency !== undefined) {
dealUpdate['estimated_value'] = {
amount: context.propsValue.estimated_value_amount,
currency: context.propsValue.estimated_value_currency
};
}
if (context.propsValue.estimated_probability !== undefined) {
dealUpdate['estimated_probability'] = context.propsValue.estimated_probability;
}
if (context.propsValue.estimated_closing_date !== undefined) {
const closingDate = new Date(context.propsValue.estimated_closing_date);
dealUpdate['estimated_closing_date'] = closingDate.toISOString().split('T')[0];
}
if (context.propsValue.custom_fields && context.propsValue.custom_fields.length > 0) {
dealUpdate['custom_fields'] = context.propsValue.custom_fields.map((fieldObj: any) => ({
id: fieldObj.id,
value: fieldObj.value
}));
}
await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/deals.update',
body: dealUpdate
});
return {
success: true,
message: 'Deal updated successfully',
deal_id: context.propsValue.deal_id
};
},
});

View File

@@ -0,0 +1,21 @@
import { PieceAuth } from '@activepieces/pieces-framework';
export const teamleaderAuth = PieceAuth.OAuth2({
description: `
To obtain your OAuth2 credentials:
1. Go to the Teamleader Marketplace (https://marketplace.teamleader.eu)
2. Log in or create an account
3. Go to "Build" and click "Create a new Integration"
4. Fill in the required information
5. On your integration's settings page, configure:
- Add \`https://cloud.activepieces.com/redirect\` to the allowed redirect URIs
- Select all required scopes for your integration
6. Copy the Client ID and Client Secret
`,
authUrl: 'https://focus.teamleader.eu/oauth2/authorize',
tokenUrl: 'https://focus.teamleader.eu/oauth2/access_token',
required: true,
scope: [
]
});

View File

@@ -0,0 +1,33 @@
import { httpClient, HttpMethod, AuthenticationType } from '@activepieces/pieces-common';
import { OAuth2PropertyValue } from '@activepieces/pieces-framework';
const TEAMLEADER_API_BASE_URL = 'https://api.focus.teamleader.eu';
export const teamleaderCommon = {
baseUrl: TEAMLEADER_API_BASE_URL,
async apiCall({
auth,
method,
resourceUri,
body = undefined,
queryParams = undefined,
}: {
auth: OAuth2PropertyValue;
method: HttpMethod;
resourceUri: string;
body?: any;
queryParams?: Record<string, string>;
}) {
return await httpClient.sendRequest({
method: method,
url: `${TEAMLEADER_API_BASE_URL}${resourceUri}`,
body,
queryParams,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
}
});
}
};

View File

@@ -0,0 +1,123 @@
import { teamleaderAuth } from '../common/auth';
import {
HttpMethod,
HttpRequest,
httpClient,
} from '@activepieces/pieces-common';
import {
TriggerStrategy,
createTrigger,
} from '@activepieces/pieces-framework';
import { teamleaderCommon } from '../common/client';
export const dealAccepted = createTrigger({
name: 'deal_accepted',
displayName: 'Deal Won',
description: 'Triggers when a deal is won/accepted',
auth: teamleaderAuth,
type: TriggerStrategy.WEBHOOK,
props: {},
sampleData: {
id: '12345678-abcd-1234-5678-1234567890cd',
title: 'Enterprise Software Deal',
reference: 'DEA-2025-002',
status: {
id: 'won',
name: 'Won'
},
lead: {
type: 'contact',
id: '43a6abc5-7fe1-0fa7-942f-85cc4ae5367d'
},
department: {
type: 'department',
id: '45985439-58ce-02df-2542-9dfe87ee1a39'
},
responsible_user: {
type: 'user',
id: '12345678-1234-1234-1234-123456789012'
},
phase: {
type: 'dealPhase',
id: '5296a95e-1870-01af-9f3f-fb3ef990093e'
},
estimated_closing_date: '2025-09-30',
estimated_value: {
amount: 25000.00,
currency: 'EUR'
},
created_at: '2025-07-25T10:15:30+00:00',
updated_at: '2025-07-25T15:45:20+00:00',
closed_at: '2025-07-25T15:45:20+00:00',
source: {
type: 'dealSource',
id: '12345678-abcd-1234-5678-1234567890ab'
},
weighted_value: {
amount: 25000.00,
currency: 'EUR'
},
probability: 100
},
onEnable: async (context) => {
const webhookUrl = context.webhookUrl;
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${teamleaderCommon.baseUrl}/webhooks.register`,
body: {
url: webhookUrl,
types: ['deal.won']
},
headers: {
Authorization: `Bearer ${context.auth.access_token}`,
'Content-Type': 'application/json',
},
};
const { status } = await httpClient.sendRequest(request);
if (status !== 204) {
throw new Error(`Failed to register webhook. Status: ${status}`);
}
},
onDisable: async (context) => {
const webhookUrl = context.webhookUrl;
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${teamleaderCommon.baseUrl}/webhooks.unregister`,
body: {
url: webhookUrl,
types: ['deal.won']
},
headers: {
Authorization: `Bearer ${context.auth.access_token}`,
'Content-Type': 'application/json',
},
};
try {
await httpClient.sendRequest(request);
} catch (error) {
console.warn('Failed to unregister webhook:', error);
}
},
run: async (context) => {
const payload = context.payload.body as any;
if (payload?.id) {
try {
const dealDetails = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/deals.info',
body: { id: payload.id }
});
return [dealDetails.body.data];
} catch (error) {
return [payload];
}
}
return [payload];
},
});

View File

@@ -0,0 +1,126 @@
import { teamleaderAuth } from '../common/auth';
import {
HttpMethod,
HttpRequest,
httpClient,
} from '@activepieces/pieces-common';
import {
TriggerStrategy,
createTrigger,
} from '@activepieces/pieces-framework';
import { teamleaderCommon } from '../common/client';
export const newCompany = createTrigger({
name: 'new_company',
displayName: 'New Company',
description: 'Triggers when a new company is created',
auth: teamleaderAuth,
type: TriggerStrategy.WEBHOOK,
props: {},
sampleData: {
id: '12345678-abcd-1234-5678-1234567890ef',
name: 'Acme Corporation',
business_type: {
id: 'be123456-1234-1234-1234-123456789012',
name: 'Limited Company'
},
vat_number: 'BE0123456789',
national_identification_number: '123456789',
emails: [
{
type: 'invoicing',
email: 'billing@acme.com'
}
],
telephones: [
{
type: 'phone',
number: '+32 2 123 45 67'
}
],
website: 'https://www.acme.com',
addresses: [
{
type: 'invoicing',
address: {
line_1: '123 Business Street',
postal_code: '1000',
city: 'Brussels',
country: 'BE'
}
}
],
iban: 'BE71 0961 2345 6769',
bic: 'GKCCBEBB',
language: 'en',
responsible_user: {
type: 'user',
id: '12345678-1234-1234-1234-123456789012'
},
tags: ['prospect', 'enterprise'],
remarks: 'Important enterprise client',
created_at: '2023-07-27T10:00:00+00:00',
updated_at: '2023-07-27T10:00:00+00:00'
},
onEnable: async (context) => {
const webhookUrl = context.webhookUrl;
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${teamleaderCommon.baseUrl}/webhooks.register`,
body: {
url: webhookUrl,
types: ['company.added']
},
headers: {
Authorization: `Bearer ${context.auth.access_token}`,
'Content-Type': 'application/json',
},
};
const { status } = await httpClient.sendRequest(request);
if (status !== 204) {
throw new Error(`Failed to register webhook. Status: ${status}`);
}
},
onDisable: async (context) => {
const webhookUrl = context.webhookUrl;
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${teamleaderCommon.baseUrl}/webhooks.unregister`,
body: {
url: webhookUrl,
types: ['company.added']
},
headers: {
Authorization: `Bearer ${context.auth.access_token}`,
'Content-Type': 'application/json',
},
};
try {
await httpClient.sendRequest(request);
} catch (error) {
console.warn('Failed to unregister webhook:', error);
}
},
run: async (context) => {
const payload = context.payload.body as any;
if (payload?.id) {
try {
const companyDetails = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/companies.info',
body: { id: payload.id }
});
return [companyDetails.body.data];
} catch (error) {
return [payload];
}
}
return [payload];
},
});

View File

@@ -0,0 +1,117 @@
import { teamleaderAuth } from '../common/auth';
import {
HttpMethod,
HttpRequest,
httpClient,
} from '@activepieces/pieces-common';
import {
TriggerStrategy,
createTrigger,
} from '@activepieces/pieces-framework';
import { teamleaderCommon } from '../common/client';
export const newContact = createTrigger({
name: 'new_contact',
displayName: 'New Contact',
description: 'Triggers when a new contact is created',
auth: teamleaderAuth,
type: TriggerStrategy.WEBHOOK,
props: {},
sampleData: {
id: '12345678-abcd-1234-5678-1234567890ab',
first_name: 'John',
last_name: 'Doe',
emails: [
{
type: 'primary',
email: 'john.doe@example.com'
}
],
telephones: [
{
type: 'mobile',
number: '+1234567890'
}
],
website: 'https://www.example.com',
addresses: [
{
type: 'primary',
address: {
line_1: '123 Main St',
postal_code: '12345',
city: 'New York',
country: 'US'
}
}
],
language: 'en',
gender: 'male',
birthdate: '1980-01-01',
tags: ['customer', 'new'],
created_at: '2023-07-27T10:00:00+00:00',
updated_at: '2023-07-27T10:00:00+00:00'
},
onEnable: async (context) => {
const webhookUrl = context.webhookUrl;
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${teamleaderCommon.baseUrl}/webhooks.register`,
body: {
url: webhookUrl,
types: ['contact.added']
},
headers: {
Authorization: `Bearer ${context.auth.access_token}`,
'Content-Type': 'application/json',
},
};
const { status } = await httpClient.sendRequest(request);
if (status !== 204) {
throw new Error(`Failed to register webhook. Status: ${status}`);
}
},
onDisable: async (context) => {
const webhookUrl = context.webhookUrl;
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${teamleaderCommon.baseUrl}/webhooks.unregister`,
body: {
url: webhookUrl,
types: ['contact.added']
},
headers: {
Authorization: `Bearer ${context.auth.access_token}`,
'Content-Type': 'application/json',
},
};
try {
await httpClient.sendRequest(request);
} catch (error) {
console.warn('Failed to unregister webhook:', error);
}
},
run: async (context) => {
const payload = context.payload.body as any;
if (payload?.id) {
try {
const contactDetails = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/contacts.info',
body: { id: payload.id }
});
return [contactDetails.body.data];
} catch (error) {
return [payload];
}
}
return [payload];
},
});

View File

@@ -0,0 +1,122 @@
import { teamleaderAuth } from '../common/auth';
import {
HttpMethod,
HttpRequest,
httpClient,
} from '@activepieces/pieces-common';
import {
TriggerStrategy,
createTrigger,
} from '@activepieces/pieces-framework';
import { teamleaderCommon } from '../common/client';
export const newDeal = createTrigger({
name: 'new_deal',
displayName: 'New Deal',
description: 'Triggers when a new deal is created',
auth: teamleaderAuth,
type: TriggerStrategy.WEBHOOK,
props: {},
sampleData: {
id: '12345678-abcd-1234-5678-1234567890cd',
title: 'New Software Implementation',
reference: 'DEA-2025-001',
status: {
id: 'open',
name: 'Open'
},
lead: {
type: 'contact',
id: '43a6abc5-7fe1-0fa7-942f-85cc4ae5367d'
},
department: {
type: 'department',
id: '45985439-58ce-02df-2542-9dfe87ee1a39'
},
responsible_user: {
type: 'user',
id: '12345678-1234-1234-1234-123456789012'
},
phase: {
type: 'dealPhase',
id: '5296a95e-1870-01af-9f3f-fb3ef990093e'
},
estimated_closing_date: '2025-09-30',
estimated_value: {
amount: 25000.00,
currency: 'EUR'
},
created_at: '2025-07-25T10:15:30+00:00',
updated_at: '2025-07-25T10:15:30+00:00',
source: {
type: 'dealSource',
id: '12345678-abcd-1234-5678-1234567890ab'
},
weighted_value: {
amount: 12500.00,
currency: 'EUR'
},
probability: 50
},
onEnable: async (context) => {
const webhookUrl = context.webhookUrl;
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${teamleaderCommon.baseUrl}/webhooks.register`,
body: {
url: webhookUrl,
types: ['deal.created']
},
headers: {
Authorization: `Bearer ${context.auth.access_token}`,
'Content-Type': 'application/json',
},
};
const { status } = await httpClient.sendRequest(request);
if (status !== 204) {
throw new Error(`Failed to register webhook. Status: ${status}`);
}
},
onDisable: async (context) => {
const webhookUrl = context.webhookUrl;
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${teamleaderCommon.baseUrl}/webhooks.unregister`,
body: {
url: webhookUrl,
types: ['deal.created']
},
headers: {
Authorization: `Bearer ${context.auth.access_token}`,
'Content-Type': 'application/json',
},
};
try {
await httpClient.sendRequest(request);
} catch (error) {
console.warn('Failed to unregister webhook:', error);
}
},
run: async (context) => {
const payload = context.payload.body as any;
if (payload?.id) {
try {
const dealDetails = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/deals.info',
body: { id: payload.id }
});
return [dealDetails.body.data];
} catch (error) {
return [payload];
}
}
return [payload];
},
});

View File

@@ -0,0 +1,118 @@
import { teamleaderAuth } from '../common/auth';
import {
HttpMethod,
HttpRequest,
httpClient,
} from '@activepieces/pieces-common';
import {
TriggerStrategy,
createTrigger,
} from '@activepieces/pieces-framework';
import { teamleaderCommon } from '../common/client';
export const newInvoice = createTrigger({
name: 'new_invoice',
displayName: 'New Invoice',
description: 'Triggers when a new invoice is drafted',
auth: teamleaderAuth,
type: TriggerStrategy.WEBHOOK,
props: {},
sampleData: {
id: '12345678-abcd-1234-5678-1234567890gh',
invoice_number: '2025 / 001',
invoice_date: '2025-01-15',
status: 'draft',
due_on: '2025-02-14',
paid: false,
paid_at: null,
sent: false,
purchase_order_number: 'PO-2025-001',
payment_reference: '+++084/2613/66074+++',
invoicee: {
type: 'company',
id: '12345678-abcd-1234-5678-1234567890ef'
},
department: {
type: 'department',
id: '45985439-58ce-02df-2542-9dfe87ee1a39'
},
total: {
amount: 2500.00,
currency: 'EUR'
},
currency_exchange_rate: {
from: 'EUR',
to: 'EUR',
rate: 1.0
},
deal: {
type: 'deal',
id: '12345678-abcd-1234-5678-1234567890cd'
},
project: null,
created_at: '2025-01-15T10:30:00+00:00',
updated_at: '2025-01-15T10:30:00+00:00',
web_url: 'https://focus.teamleader.eu/invoice_detail.php?id=12345678-abcd-1234-5678-1234567890gh'
},
onEnable: async (context) => {
const webhookUrl = context.webhookUrl;
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${teamleaderCommon.baseUrl}/webhooks.register`,
body: {
url: webhookUrl,
types: ['invoice.drafted']
},
headers: {
Authorization: `Bearer ${context.auth.access_token}`,
'Content-Type': 'application/json',
},
};
const { status } = await httpClient.sendRequest(request);
if (status !== 204) {
throw new Error(`Failed to register webhook. Status: ${status}`);
}
},
onDisable: async (context) => {
const webhookUrl = context.webhookUrl;
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${teamleaderCommon.baseUrl}/webhooks.unregister`,
body: {
url: webhookUrl,
types: ['invoice.drafted']
},
headers: {
Authorization: `Bearer ${context.auth.access_token}`,
'Content-Type': 'application/json',
},
};
try {
await httpClient.sendRequest(request);
} catch (error) {
console.warn('Failed to unregister webhook:', error);
}
},
run: async (context) => {
const payload = context.payload.body as any;
if (payload?.id) {
try {
const invoiceDetails = await teamleaderCommon.apiCall({
auth: context.auth,
method: HttpMethod.POST,
resourceUri: '/invoices.info',
body: { id: payload.id }
});
return [invoiceDetails.body.data];
} catch (error) {
return [payload];
}
}
return [payload];
},
});

View File

@@ -0,0 +1,20 @@
{
"extends": "../../../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"importHelpers": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"noPropertyAccessFromIndexSignature": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
]
}

View File

@@ -0,0 +1,9 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"include": ["src/**/*.ts"]
}