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,280 @@
{
"Email Address": "E-Mail-Adresse",
"API Key": "API-Schlüssel",
"Email Address of the Token Owner": "E-Mail-Adresse des Token-Eigentümers",
"Your API Key in settings > integrations": "Ihr API-Schlüssel in den Einstellungen > Integrationen",
"Create Person": "Person erstellen",
"Update Person": "Person aktualisieren",
"Create Lead": "Lead erstellen",
"Update Lead": "Lead aktualisieren",
"Convert Lead": "Lead umwandeln",
"Create Company": "Firma erstellen",
"Update Company": "Firma aktualisieren",
"Create Opportunity": "Verkaufschance erstellen",
"Update Opportunity": "Update-Verkaufschance",
"Create Project": "Projekt erstellen",
"Update Project": "Projekt aktualisieren",
"Create Task": "Aufgabe erstellen",
"Create Activity": "Aktivität erstellen",
"Search for an Activity": "Nach einer Aktivität suchen",
"Search for a Person": "Nach einer Person suchen",
"Search for a Lead": "Nach einem Lead suchen",
"Search for a Company": "Nach Unternehmen suchen",
"Search for an Opportunity": "Suche nach einer Verkaufschance",
"Search for a Project": "Nach einem Projekt suchen",
"Custom API Call": "Eigener API-Aufruf",
"Adds a new person/contact.": "Fügt eine neue Person/Kontakt hinzu.",
"Updates a person based on matching criteria.": "Aktualisiert eine Person basierend auf den passenden Kriterien.",
"Adds a new lead.": "Fügt eine neue Führung hinzu.",
"Updates an existing lead.": "Aktualisiert einen existierenden Lead.",
"Converts a lead into a person (optionally with company/opportunity).": "Konvertiert eine Lead in eine Person (wahlweise mit Firmen/Chance).",
"Adds a new company.": "Fügt ein neues Unternehmen hinzu.",
"Updates a company record.": "Aktualisiert einen Unternehmenseintrag.",
"Adds a new opportunity.": "Fügt eine neue Chance hinzu.",
"Updates an opportunity using match criteria.": "Aktualisiert eine Chance unter Verwendung von Matchkriterien.",
"Adds a new project.": "Fügt ein neues Projekt hinzu.",
"Updates a project record.": "Aktualisiert einen Projektdaten.",
"Adds a new task under a person, lead, or opportunity.": "Fügt eine neue Aufgabe unter einer Person, einer Führung oder einer Chance hinzu.",
"Logs an activity related to CRM entities.": "Protokolliert eine Aktivität im Zusammenhang mit CRM-Entitäten.",
"Find an existing activity by type/criteria.": "Finden Sie eine vorhandene Aktivität nach Typ/Kriterien.",
"Lookup a person using match criteria.": "Suchen Sie eine Person nach Matchkriterien.",
"Lookup a lead using match criteria.": "Suchen Sie einen Vorsprung anhand von Matchkriterien.",
"Lookup a company.": "Suche ein Unternehmen.",
"Lookup an opportunity.": "Suche nach einer Möglichkeit.",
"Lookup a project.": "Suche ein Projekt.",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"Full Name": "Voller Name",
"Emails": "E-Mails",
"Phone Numbers": "Telefonnummern",
"Street": "Straße",
"City": "Stadt",
"State/Region": "Bundesland/Region",
"Postal Code": "Postleitzahl",
"Country": "Land",
"Person": "Person",
"Email": "E-Mail",
"Category of the email address (e.g., work, personal)": "Kategorie der E-Mail-Adresse (z. B. Arbeit, persönlich)",
"Lead": "Lead",
"Company": "Firma",
"Opportunity": "Verkaufschance",
"Email Domain": "E-Mail-Domäne",
"Details": "Details",
"Primary Contact": "Primärer Kontakt",
"Name": "Name",
"Pipeline": "Pipeline",
"Pipeline Stage": "Pipeline-Phase",
"Project": "Projekt",
"Task Name": "Aufgabenname",
"Activity Type": "Aktivitätstyp",
"Assignee": "Assignee",
"Related Record Type": "Verwandter Datensatztyp",
"Related Record": "Verwandter Datensatz",
"Due Date/Time": "Fällig Datum/Uhrzeit",
"Reminder Date/Time": "Erinnerungsdatum/-zeit",
"Priority": "Priorität",
"Tags": "Tags",
"Parent Entity": "Übergeordnete Entität",
"Parent Entity Resource": "Übergeordnete Entitäts-Ressource",
"Page Size": "Einträge pro Seite",
"Page Number": "Seitennummer",
"Minimum Activity Date": "Minimales Aktivitätsdatum",
"Maximum Activity Date": "Maximales Aktivitätsdatum",
"Full Result": "Gesamtes Ergebnis",
"Phone Number": "Telefonnummer",
"Contact Type": "Kontakttyp",
"State": "Bundesland",
"Socials": "Socials",
"Followed": "Gefolgt",
"Age": "Alter",
"Sort By": "Sortieren nach",
"Sort Direction": "Sortierrichtung",
"Minimum Interaction Count": "Minimale Interaktionsanzahl",
"Maximum Interaction Count": "Maximale Interaktionsanzahl",
"Minimum Interaction Date": "Minimales Interaktionsdatum",
"Maximum Interaction Date": "Maximales Interaktionsdatum",
"Minimum Created Date": "Minimales Erstellungsdatum",
"Maximum Created Date": "Maximales Erstellungsdatum",
"Lead Status": "Lead Status",
"Customer Source": "Kundenquelle",
"Include Converted Leads": "Konvertierte Leads einbeziehen",
"Minimum Monetary Value": "Minimaler Währungswert",
"Maximum Monetary Value": "Maximaler Währungswert",
"Minimum Modified Date": "Minimales Änderungsdatum",
"Maximum Modified Date": "Maximales Änderungsdatum",
"Status": "Status",
"Primary Contacts": "Primäre Kontakte",
"Loss Reason": "Verlustgrund",
"Minimum Stage Change Date": "Minimales Änderungsdatum der Stage",
"Maximum Stage Change Date": "Maximales Änderungsdatum der Stage",
"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)",
"select a person": "eine Person auswählen",
"select a Lead": "einen Lead auswählen",
"select a Company": "wähle eine Firma",
"select an Opportunity": "eine Verkaufschance auswählen",
"E.g. democompany.com": "Z.B. Demofirma.com",
"select a primary contact": "einen primären Kontakt auswählen",
"The name of the opportunity": "Der Name der Verkaufschance",
"select a Pipeline": "wähle eine Pipeline",
"Select a stage": "Wähle eine Stufe",
"The name of the project": "Der Name des Projekts",
"The details of the project": "Die Details des Projekts",
"select a Project": "ein Projekt auswählen",
"Details fo this task": "Details für diese Aufgabe",
"Select activity Type": "Aktivitätstyp auswählen",
"select a user to assign to": "wähle einen Benutzer zum Zuweisen aus",
"Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).": "Wählen Sie den Typ des Kupfer-Datensatzes, mit dem diese Aufgabe verlinkt werden soll (z.B. Person, Firma, Lead, Opportunity, oder Projekt).",
"Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.": "Wählen Sie den Datensatz aus dem oben gewählten Typ, an den diese Aufgabe angehängt werden soll. Wählen Sie zum Beispiel die Person oder die Verkaufschance aus, für die sich die Aufgabe bezieht.",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).": "Geben Sie Datum und Uhrzeit im 24-Stunden-Format ein, z.B. `2025-09-09 11:40` (11:40 AM) oder `2025-09-09 13:00` (1:00 PM).",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)": "Geben Sie Datum und Uhrzeit im 24-Stunden-Format ein, z.B. `2025-09-09 11:40` (11:40 AM) oder `2025-09-09 13:00` (1:00 PM)",
"Select parent entity": "Übergeordnete Entität auswählen",
"Select Resource": "Ressource auswählen",
"Default 50. Max 200.": "Standard 50. Max. 200.",
"24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.": "24-Stunden-Format, z.B. 2025-09-10 11:40. Der Zeitstempel des frühesten Aktivitätsdatums.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.": "24-Stunden-Format, z.B. 2025-09-10 13:00. Der Zeitstempel des aktuellen Aktivitätsdatums.",
"(Optional) If set, search performance improves but duplicate activity logs may be returned": "(Optional) Falls gesetzt, verbessert sich die Suchleistung, aber doppelte Aktivitätsprotokolle können zurückgegeben werden",
"Full name of the People to search for.": "Voller Name der zu suchenden Menschen.",
"Phone Number of the People to search for.": "Telefonnummer der zu suchenden Personen.",
"Emails of the People to search for.": "E-Mails der zu suchenden Menschen.",
"Select contact Type": "Kontakttyp auswählen",
"select assignees": "wähle Bevollmächtigte",
"select Companies": "ausgewählte Unternehmen",
"select Opportunities": "wähle Verkaufschancen",
"The city in which People must be located.": "Die Stadt, in der sich die Menschen befinden müssen.",
"The state or province in which People must be located.": "Der Staat oder die Provinz, in der die Menschen ihren Sitz haben müssen.",
"The postal code in which People must be located.": "Die Postleitzahl, in der sich die Menschen befinden müssen.",
"The two character country code where People must be located.": "Der zweistellige Länderkodex, in dem Personen lokalisiert werden müssen.",
"Filter People to those that match at least one of the tags specified.": "Filter Personen nach denen, die mindestens einem der angegebenen Tags entsprechen.",
"Filter People to those that match at least one of the social accounts specified.": "Personen nach Personen filtern, die mindestens einem der angegebenen sozialen Konten entsprechen.",
"Filter by followed state": "Nach Status filtern",
"The maximum age in seconds that People must be.": "Das maximale Alter in Sekunden, das Personen sein müssen.",
"The field on which to sort the results": "Das Feld, nach dem die Ergebnisse sortiert werden sollen",
"The direction in which to sort the result": "Die Richtung, in der das Ergebnis sortiert werden soll",
"The minimum number of interactions People must have had.": "Die minimale Anzahl von Interaktionen, die die Menschen haben müssen.",
"The maximum number of interactions People must have had.": "Die maximale Anzahl an Interaktionen, die die Menschen haben müssen.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.": "24-Stunden-Format, z.B. 2025-09-10 13:00. Der Zeitstempel des ersten Datums der letzten Interaktion.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.": "24-Stunden-Format, z.B. 2025-09-10 13:00. Der Zeitstempel des letzten Interaktionsdatums.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00.",
"Full name of the Lead to search for.": "Voller Name des zu suchenden Leads.",
"Phone Number of the Lead to search for.": "Telefonnummer des zu suchenden Leads.",
"Emails of the Lead to search for.\t": "E-Mails des Interesses, nach dem gesucht werden soll.\t",
"Select lead status": "Lead-Status auswählen",
"Select customer source.": "Kundenquelle auswählen.",
"The city in which Lead must be located.": "Die Stadt, in der sich der Lead befinden muss.",
"The state or province in which Lead must be located.": "Der Bundesstaat oder die Provinz, in der sich Lead befinden muss.",
"The postal code in which Lead must be located.": "Die Postleitzahl, in der sich der Lead befinden muss.",
"The two character country code where Lead must be located.": "Der zweistellige Ländercode, in dem Blei gefunden werden muss.",
"Filter Lead to those that match at least one of the tags specified.": "Filter Lead zu denen, die mindestens einem der angegebenen Tags entsprechen.",
"Filter Lead to those that match at least one of the social accounts specified.": "Filter Lead zu denen, die mindestens einem der angegebenen sozialen Konten entsprechen.",
"The maximum age in seconds that Lead must be.": "Das maximale Alter in Sekunden, das der Lead sein muss.",
"Specify if response should contain converted leads.": "Legen Sie fest, ob Antwort konvertierte Leads enthalten soll.",
"The minimum monetary value Leads must have.": "Der minimale monetäre Wert der Leads muss haben.",
"The maximum monetary value Leads must have.": "Der maximale monetäre Wert der Leads muss haben.",
"The minimum number of interactions Lead must have had.": "Die minimale Anzahl von Interaktionen Blei muss gehabt haben.",
"The maximum number of interactions Lead must have had.": "Die maximale Anzahl von Interaktionen Blei hatte.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00. Der Zeitstempel des frühesten Datumslaufs wird geändert.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.": "24-Stunden-Format, z.B. 2025-09-10 13:00. Der Zeitstempel des aktuellen Datumslaufs wird geändert.",
"Full name of the Company to search for.": "Vollständiger Name des Unternehmens zu suchen.",
"Phone Number of the Company to search for.": "Telefonnummer der zu suchenden Firma.",
"Email Domain of the Company to search for.": "E-Mail Domain des Unternehmens zu suchen.",
"The city in which Company must be located.": "Die Stadt, in der sich die Firma befinden muss.",
"The state or province in which Company must be located.": "Der Staat oder die Provinz, in der die Gesellschaft angesiedelt sein muss.",
"The postal code in which Company must be located.": "Die Postleitzahl, in der sich die Firma befinden muss.",
"The two character country code where Company must be located.": "Die zweistellige Länderkennung, in der sich die Firma befinden muss.",
"Filter Company to those that match at least one of the tags specified.": "Filtern Sie Unternehmen nach denen, die mindestens einem der angegebenen Tags entsprechen.",
"Filter Company to those that match at least one of the social accounts specified.": "Filtern Sie Unternehmen nach denen, die mindestens einem der angegebenen sozialen Konten entsprechen.",
"The maximum age in seconds that Company must be.": "Das maximale Alter in Sekunden, das das Unternehmen sein muss.",
"The minimum number of interactions Company must have had.": "Die minimale Anzahl von Interaktionen der Gesellschaft muss gehabt haben.",
"The maximum number of interactions Company must have had.": "Die maximale Anzahl an Interaktionen, die die Gesellschaft haben muss.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00.",
"Full name of the Opportunity to search for.": "Voller Name der zu suchenden Verkaufschance.",
"Filter by Opportunity status": "Filtern nach Opportunity Status",
"select primary contacts": "primäre Kontakte auswählen",
"Select loss reason.": "Grund für Verlust auswählen.",
"The minimum monetary value Opportunities must have.": "Der minimale Geldwert muss Chancen haben.",
"The maximum monetary value Opportunities must have.": "Der maximale Geldwert muss Opportunities haben.",
"The minimum number of interactions Opportunity must have had.": "Die minimale Anzahl an Interaktionen Opportunity muss gehabt haben.",
"The maximum number of interactions Opportunity must have had.": "Die maximale Anzahl an Interaktionen, die Opportunity haben muss.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.": "24-Stunden-Format, z.B. 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.": "24-Stunden-Format, z.B. 2025-09-10 13:00. Der Zeitstempel des letzten Datumsabschlussdatums.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00 Uhr, der Zeitstempel des frühesten Datums eines Bühnenwechsels.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.": "Das 24-Stunden-Format, z.B. 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.": "24-Stunden-Format, z.B. 2025-09-10 13:00. Der Zeitstempel des ersten Datums wird geändert.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.": "24-Stunden-Format, z.B. 2025-09-10 13:00. Der Zeitstempel der letzten Opportunity wird geändert.",
"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..",
"None": "Keine",
"Low": "Niedrig",
"Medium": "Mittel",
"High": "Hoch",
"Task": "Aufgabe",
"followed": "gefolgt",
"not followed": "nicht gefolgt",
"Title": "Titel",
"Phone": "Telefon",
"Date Modified": "Änderungsdatum",
"Date Created": "Erstellungsdatum",
"Zip": "Zip",
"Ascending": "Aufsteigend",
"Descending": "Absteigend",
"Company Name": "Firmenname",
"Value": "Wert",
"Inactive Days": "Inaktive Tage",
"Contact": "Kontakt",
"Contact First Name": "Vorname des Kontakts",
"Contact Last Name": "Kontakt Nachname",
"Contact Group": "Kontaktgruppe",
"Last Interaction": "Letzte Interaktion",
"Interaction Count": "Interaktionszähler",
"Primary Website": "Primäre Webseite",
"Open": "Öffnen",
"Won": "Gewonnen",
"Lost": "Verlorene",
"Abandoned": "Verlassen",
"Customer Source ID": "Kundenquellen-ID",
"Monetary Unit": "Währungseinheit",
"Monetary Value": "Geldwert",
"Stage": "Teil",
"Completed": "Abgeschlossen",
"Assigned To": "Zugewiesen an",
"Related To": "Ähnlich zu",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD",
"New Activity": "Neue Aktivität",
"New Person": "Neue Person",
"New Lead": "Neuer Lead",
"New Task": "Neue Aufgabe",
"Updated Lead": "Aktualisierte Lead",
"Updated Task": "Aktualisierte Aufgabe",
"Updated Opportunity": "Aktualisierte Verkaufschance",
"Updated Opportunity Stage": "Aktualisierte Verkaufs-Phase",
"Updated Opportunity Status": "Status der aktualisierten Verkaufschance",
"Updated Project": "Aktualisiertes Projekt",
"Updated Lead Status": "Aktualisierte Lead-Status",
"Triggers when a new activity is logged": "Wird ausgelöst, wenn eine neue Aktivität protokolliert wird",
"Triggers when a new person/contact is created.": "Wird ausgelöst, wenn eine neue Person/Kontakt erstellt wird.",
"Triggers when a new lead is created.": "Wird ausgelöst, wenn ein neuer Lead erstellt wird.",
"Triggers when a new task is created.": "Wird ausgelöst, wenn eine neue Aufgabe erstellt wird.",
"Triggers when a lead is modified.": "Wird ausgelöst, wenn ein Lead geändert wird.",
"Triggers when a task is updated.": "Wird ausgelöst, wenn eine Aufgabe aktualisiert wird.",
"Triggers when an opportunity changes.": "Wird ausgelöst, wenn sich eine Chance ändert.",
"Triggers when an opportunity stage changes": "Wird ausgelöst, wenn sich eine Opportunitätsstufe ändert",
"Triggers when an opportunity's status changes.": "Wird ausgelöst, wenn sich der Status einer Chance ändert.",
"Triggers when a project is updated.": "Wird ausgelöst, wenn ein Projekt aktualisiert wird.",
"Triggers when the status of a lead changes.": "Wird ausgelöst, wenn sich der Status eines Lead ändert."
}

View File

@@ -0,0 +1,280 @@
{
"Email Address": "Dirección de email",
"API Key": "Clave API",
"Email Address of the Token Owner": "Dirección de correo electrónico del propietario del token",
"Your API Key in settings > integrations": "Tu clave API en ajustes > integraciones",
"Create Person": "Crear Persona",
"Update Person": "Actualizar Persona",
"Create Lead": "Crear plomo",
"Update Lead": "Actualizar plomo",
"Convert Lead": "Convertir plomo",
"Create Company": "Crear empresa",
"Update Company": "Actualizar Compañía",
"Create Opportunity": "Crear Oportunidad",
"Update Opportunity": "Actualizar Oportunidad",
"Create Project": "Crear proyecto",
"Update Project": "Actualizar proyecto",
"Create Task": "Crear tarea",
"Create Activity": "Crear actividad",
"Search for an Activity": "Buscar una actividad",
"Search for a Person": "Buscar una persona",
"Search for a Lead": "Buscar un plomo",
"Search for a Company": "Buscar una empresa",
"Search for an Opportunity": "Buscar una oportunidad",
"Search for a Project": "Buscar un proyecto",
"Custom API Call": "Llamada API personalizada",
"Adds a new person/contact.": "Añade una nueva persona/contacto.",
"Updates a person based on matching criteria.": "Actualiza a una persona basada en criterios coincidentes.",
"Adds a new lead.": "Añade una nueva iniciativa.",
"Updates an existing lead.": "Actualiza un cliente potencial.",
"Converts a lead into a person (optionally with company/opportunity).": "Convierte un plomo en una persona (opcionalmente con compañía/oportunidad).",
"Adds a new company.": "Añade una nueva empresa.",
"Updates a company record.": "Actualiza un registro de la empresa.",
"Adds a new opportunity.": "Añade una nueva oportunidad.",
"Updates an opportunity using match criteria.": "Actualiza una oportunidad usando criterios de partida.",
"Adds a new project.": "Añade un nuevo proyecto.",
"Updates a project record.": "Actualiza un registro de proyecto.",
"Adds a new task under a person, lead, or opportunity.": "Añade una nueva tarea bajo una persona, líder u oportunidad.",
"Logs an activity related to CRM entities.": "Registra una actividad relacionada con entidades CRM.",
"Find an existing activity by type/criteria.": "Encuentre una actividad existente por tipo/criterio.",
"Lookup a person using match criteria.": "Busca a una persona usando criterios de partida.",
"Lookup a lead using match criteria.": "Busca un cliente potencial usando criterios de partida.",
"Lookup a company.": "Busca una empresa.",
"Lookup an opportunity.": "Busca una oportunidad.",
"Lookup a project.": "Buscar un proyecto.",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"Full Name": "Nombre completo",
"Emails": "Correos",
"Phone Numbers": "Números de teléfono",
"Street": "Calle",
"City": "Ciudad",
"State/Region": "Estado/Región",
"Postal Code": "Código postal",
"Country": "País",
"Person": "Persona",
"Email": "E-mail",
"Category of the email address (e.g., work, personal)": "Categoría de la dirección de correo electrónico (por ej., trabajo, personal)",
"Lead": "Plomo",
"Company": "Empresa",
"Opportunity": "Oportunidad",
"Email Domain": "Dominio de Email",
"Details": "Detalles",
"Primary Contact": "Contacto Principal",
"Name": "Nombre",
"Pipeline": "Pipeline",
"Pipeline Stage": "Etapa del gasoducto",
"Project": "Projekt",
"Task Name": "Nombre de tarea",
"Activity Type": "Tipo de actividad",
"Assignee": "Assignee",
"Related Record Type": "Tipo de registro relacionado",
"Related Record": "Registro Relacionado",
"Due Date/Time": "Fecha y hora de vencimiento",
"Reminder Date/Time": "Fecha y hora de recordatorio",
"Priority": "Prioridad",
"Tags": "Etiquetas",
"Parent Entity": "Entidad padre",
"Parent Entity Resource": "Recurso de la entidad padre",
"Page Size": "Tamaño de página",
"Page Number": "Número de página",
"Minimum Activity Date": "Fecha mínima de actividad",
"Maximum Activity Date": "Fecha máxima de actividad",
"Full Result": "Resultado completo",
"Phone Number": "Número de teléfono",
"Contact Type": "Tipo de contacto",
"State": "Estado",
"Socials": "Socials",
"Followed": "Seguido",
"Age": "Edad",
"Sort By": "Ordenar por",
"Sort Direction": "Ordenar dirección",
"Minimum Interaction Count": "Recuento mínimo de interacción",
"Maximum Interaction Count": "Número máximo de interacciones",
"Minimum Interaction Date": "Fecha mínima de interacción",
"Maximum Interaction Date": "Fecha máxima de interacción",
"Minimum Created Date": "Fecha Mínima Creada",
"Maximum Created Date": "Fecha máxima de creación",
"Lead Status": "Estado del Cliente",
"Customer Source": "Fuente del cliente",
"Include Converted Leads": "Incluye potenciales convertidos",
"Minimum Monetary Value": "Valor monetario mínimo",
"Maximum Monetary Value": "Valor monetario máximo",
"Minimum Modified Date": "Fecha mínima modificada",
"Maximum Modified Date": "Fecha máxima modificada",
"Status": "Estado",
"Primary Contacts": "Contactos principales",
"Loss Reason": "Razón de la pérdida",
"Minimum Stage Change Date": "Fecha Mínima de Cambio de Etapa",
"Maximum Stage Change Date": "Fecha máxima de cambio de Etapa",
"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)",
"select a person": "seleccione una persona",
"select a Lead": "seleccionar un plomo",
"select a Company": "seleccione una empresa",
"select an Opportunity": "seleccione una oportunidad",
"E.g. democompany.com": "Ejemplo democompany.com",
"select a primary contact": "seleccionar un contacto principal",
"The name of the opportunity": "El nombre de la oportunidad",
"select a Pipeline": "seleccione un Pipeline",
"Select a stage": "Seleccione una etapa",
"The name of the project": "El nombre del proyecto",
"The details of the project": "Los detalles del proyecto",
"select a Project": "seleccione un proyecto",
"Details fo this task": "Detalles de esta tarea",
"Select activity Type": "Seleccionar tipo de actividad",
"select a user to assign to": "seleccione un usuario al que asignar",
"Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).": "Seleccione el tipo de registro de cobre al que esta tarea debe estar vinculado (por ejemplo, Persona, Empresa, Líder, Oportunidad o Proyecto).",
"Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.": "Seleccione el registro específico (a partir del tipo seleccionado arriba) al que esta tarea debe ser adjuntada. Por ejemplo, elija la Persona u Oportunidad a la que se refiera la tarea.",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).": "Introduzca la fecha y la hora en formato de 24 horas, por ejemplo `2025-09-09-09 11:40` (11:40 AM) o `2025-09-09 13:00` (1:00 PM).",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)": "Introduzca fecha y hora en formato de 24 horas, p. ej., `2025-09-09-09 11:40` (11:40 AM) o `2025-09-09 13:00` (1:00 PM)",
"Select parent entity": "Seleccionar entidad padre",
"Select Resource": "Seleccionar Recurso",
"Default 50. Max 200.": "Por defecto 50. Máximo 200.",
"24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.": "Formato de 24 horas, p. ej., 2025-09-10 11:40. La fecha de la actividad más temprana.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"(Optional) If set, search performance improves but duplicate activity logs may be returned": "(Opcional) Si se establece, el rendimiento de la búsqueda mejora pero se pueden devolver registros de actividad duplicados",
"Full name of the People to search for.": "Nombre completo de la gente a buscar.",
"Phone Number of the People to search for.": "Número de teléfono de las personas a buscar.",
"Emails of the People to search for.": "Correos de la gente a buscar.",
"Select contact Type": "Seleccionar tipo de contacto",
"select assignees": "seleccionar asignados",
"select Companies": "seleccionar empresas",
"select Opportunities": "seleccionar Oportunidades",
"The city in which People must be located.": "La ciudad en la que hay que situar a la gente.",
"The state or province in which People must be located.": "Estado o provincia en la que se debe ubicar la población.",
"The postal code in which People must be located.": "El código postal en el que debe ubicarse la gente.",
"The two character country code where People must be located.": "El código de país de dos caracteres en el que debe ubicarse la gente.",
"Filter People to those that match at least one of the tags specified.": "Filtrar personas a aquellas que coincidan al menos con una de las etiquetas especificadas.",
"Filter People to those that match at least one of the social accounts specified.": "Filtrar Personas a las que coincidan al menos con una de las cuentas sociales especificadas.",
"Filter by followed state": "Filtrar por estado seguido",
"The maximum age in seconds that People must be.": "La edad máxima en segundos que la gente debe ser.",
"The field on which to sort the results": "El campo en el que ordenar los resultados",
"The direction in which to sort the result": "La dirección en la que ordenar el resultado",
"The minimum number of interactions People must have had.": "El número mínimo de interacciones que las personas deben haber tenido.",
"The maximum number of interactions People must have had.": "El número máximo de interacciones que la gente debe haber tenido.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.": "Formato de 24 horas, p. ej., 2025-09-10 13:00. La fecha más temprana de la última interacción.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.": "Formato de 24 horas, p. ej., 2025-09-10 13:00. La fecha de la última fecha de la última interacción.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.": "Formato de 24 horas, p. ej., 2025-09-10 13:00. El horario de la última fecha de la gente es creado.",
"Full name of the Lead to search for.": "Nombre completo del Cliente a buscar.",
"Phone Number of the Lead to search for.": "Número de teléfono del Cliente a buscar.",
"Emails of the Lead to search for.\t": "Correos del jefe a buscar.\t",
"Select lead status": "Seleccionar estado de plomo",
"Select customer source.": "Seleccione la fuente del cliente.",
"The city in which Lead must be located.": "La ciudad en la que se debe ubicar el Líder.",
"The state or province in which Lead must be located.": "Estado o provincia en el que se debe ubicar el Líder.",
"The postal code in which Lead must be located.": "Código postal en el que se debe ubicar el plomo.",
"The two character country code where Lead must be located.": "El código de país de dos caracteres donde el plomo debe estar ubicado.",
"Filter Lead to those that match at least one of the tags specified.": "Filtrar a aquellos que coincidan al menos con una de las etiquetas especificadas.",
"Filter Lead to those that match at least one of the social accounts specified.": "Filtrar plomo a aquellos que coincidan al menos con una de las cuentas sociales especificadas.",
"The maximum age in seconds that Lead must be.": "La edad máxima en segundos que el plomo debe ser.",
"Specify if response should contain converted leads.": "Especifique si la respuesta debe contener clientes potenciales convertidos.",
"The minimum monetary value Leads must have.": "El mínimo del valor monetario de los clientes potenciales debe tener.",
"The maximum monetary value Leads must have.": "El valor monetario máximo que los clientes potenciales deben tener.",
"The minimum number of interactions Lead must have had.": "El número mínimo de interacciones que el plomo debe haber tenido.",
"The maximum number of interactions Lead must have had.": "El número máximo de interacciones que el plomo debe haber tenido.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"Full name of the Company to search for.": "Nombre completo de la empresa a buscar.",
"Phone Number of the Company to search for.": "Número de teléfono de la empresa a buscar.",
"Email Domain of the Company to search for.": "Dominio de Correo de la Compañía a buscar.",
"The city in which Company must be located.": "La ciudad en la que se debe ubicar la empresa.",
"The state or province in which Company must be located.": "El estado o provincia en el que se debe ubicar la Sociedad.",
"The postal code in which Company must be located.": "El código postal en el que debe establecerse la empresa.",
"The two character country code where Company must be located.": "El código de país de dos caracteres en el que debe ubicarse la compañía.",
"Filter Company to those that match at least one of the tags specified.": "Filtrar empresa a aquellos que coincidan al menos con una de las etiquetas especificadas.",
"Filter Company to those that match at least one of the social accounts specified.": "Filtrar Compañía a aquellos que coincidan al menos con una de las cuentas sociales especificadas.",
"The maximum age in seconds that Company must be.": "La edad máxima en segundos que la Compañía debe ser.",
"The minimum number of interactions Company must have had.": "El número mínimo de interacciones que la Compañía debe haber tenido.",
"The maximum number of interactions Company must have had.": "El número máximo de interacciones que la Compañía debe haber tenido.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"Full name of the Opportunity to search for.": "Nombre completo de la oportunidad de buscar.",
"Filter by Opportunity status": "Filtrar por estado de oportunidad",
"select primary contacts": "seleccionar contactos principales",
"Select loss reason.": "Seleccionar razón de pérdida.",
"The minimum monetary value Opportunities must have.": "Las Oportunidades mínimas de valor monetario deben tener.",
"The maximum monetary value Opportunities must have.": "Las Oportunidades máximas de valor monetario deben tener.",
"The minimum number of interactions Opportunity must have had.": "Debe haber tenido el número mínimo de interacciones Oportunidades.",
"The maximum number of interactions Opportunity must have had.": "Debe haber tenido el número máximo de interacciones Oportunidades.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.": "Formato de 24 horas, p. ej., 2025-09-10 13:00.",
"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.",
"None": "Ninguna",
"Low": "Baja",
"Medium": "Medio",
"High": "Alta",
"Task": "Tarea",
"followed": "seguido",
"not followed": "no seguido",
"Title": "Título",
"Phone": "Teléfono",
"Date Modified": "Fecha Modificada",
"Date Created": "Fecha de creación",
"Zip": "Zip",
"Ascending": "Ascendiente",
"Descending": "Descendiente",
"Company Name": "Nombre De La Empresa",
"Value": "Valor",
"Inactive Days": "Días inactivos",
"Contact": "Contacto",
"Contact First Name": "Nombre del contacto",
"Contact Last Name": "Apellido del contacto",
"Contact Group": "Grupo de contactos",
"Last Interaction": "Última interacción",
"Interaction Count": "Número de interacciones",
"Primary Website": "Sitio web principal",
"Open": "Abrir",
"Won": "Ganado",
"Lost": "Perdido",
"Abandoned": "Abandonado",
"Customer Source ID": "ID Fuente de Cliente",
"Monetary Unit": "Unidad monetaria",
"Monetary Value": "Valor monetario",
"Stage": "Etapa",
"Completed": "Completado",
"Assigned To": "Asignado a",
"Related To": "Relacionado con",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO",
"New Activity": "Nueva actividad",
"New Person": "Nueva persona",
"New Lead": "Nuevo plomo",
"New Task": "Nueva tarea",
"Updated Lead": "Prospectos actualizados",
"Updated Task": "Tarea actualizada",
"Updated Opportunity": "Oportunidad actualizada",
"Updated Opportunity Stage": "Etapa de Oportunidad Actualizada",
"Updated Opportunity Status": "Estado de la oportunidad actualizado",
"Updated Project": "Proyecto actualizado",
"Updated Lead Status": "Estado del Cliente Cliente Actualizado",
"Triggers when a new activity is logged": "Dispara cuando se registra una nueva actividad",
"Triggers when a new person/contact is created.": "Se activa cuando se crea una nueva persona/contacto.",
"Triggers when a new lead is created.": "Dispara cuando se crea un nuevo plomo.",
"Triggers when a new task is created.": "Se activa cuando se crea una nueva tarea.",
"Triggers when a lead is modified.": "Activa cuando se modifica un plomo.",
"Triggers when a task is updated.": "Se activa cuando se actualiza una tarea.",
"Triggers when an opportunity changes.": "Dispara cuando una oportunidad cambia.",
"Triggers when an opportunity stage changes": "Dispara cuando una etapa de oportunidad cambia",
"Triggers when an opportunity's status changes.": "Se activa cuando cambia el estado de una oportunidad.",
"Triggers when a project is updated.": "Se activa cuando se actualiza un proyecto.",
"Triggers when the status of a lead changes.": "Se activa cuando el estado de un plomo cambia."
}

View File

@@ -0,0 +1,280 @@
{
"Email Address": "Adresse e-mail",
"API Key": "Clé API",
"Email Address of the Token Owner": "Adresse e-mail du propriétaire du jeton",
"Your API Key in settings > integrations": "Votre clé API dans les paramètres > intégrations",
"Create Person": "Créer une personne",
"Update Person": "Mettre à jour la personne",
"Create Lead": "Créer Prospect",
"Update Lead": "Mettre à jour le prospect",
"Convert Lead": "Convertir Prospect",
"Create Company": "Créer une entreprise",
"Update Company": "Mettre à jour la société",
"Create Opportunity": "Créer une Affaire",
"Update Opportunity": "Mettre à jour l'Affaire",
"Create Project": "Créer un projet",
"Update Project": "Mettre à jour le projet",
"Create Task": "Créer une tâche",
"Create Activity": "Créer une activité",
"Search for an Activity": "Rechercher une activité",
"Search for a Person": "Rechercher une personne",
"Search for a Lead": "Rechercher un prospect",
"Search for a Company": "Rechercher une entreprise",
"Search for an Opportunity": "Rechercher une opportunité",
"Search for a Project": "Rechercher un projet",
"Custom API Call": "Appel d'API personnalisé",
"Adds a new person/contact.": "Ajoute une nouvelle personne/contact.",
"Updates a person based on matching criteria.": "Met à jour une personne en fonction des critères de correspondance.",
"Adds a new lead.": "Ajoute un nouveau prospect.",
"Updates an existing lead.": "Met à jour un prospect existant.",
"Converts a lead into a person (optionally with company/opportunity).": "Convertit un plomb en une personne (éventuellement avec l'entreprise/opportunité).",
"Adds a new company.": "Ajoute une nouvelle société.",
"Updates a company record.": "Met à jour un dossier d'entreprise.",
"Adds a new opportunity.": "Ajoute une nouvelle opportunité.",
"Updates an opportunity using match criteria.": "Met à jour une opportunité en utilisant des critères de match.",
"Adds a new project.": "Ajoute un nouveau projet.",
"Updates a project record.": "Met à jour un enregistrement de projet.",
"Adds a new task under a person, lead, or opportunity.": "Ajoute une nouvelle tâche sous une personne, un prospect ou une opportunité.",
"Logs an activity related to CRM entities.": "Enregistre une activité liée aux entités CRM.",
"Find an existing activity by type/criteria.": "Trouver une activité existante par type/critère.",
"Lookup a person using match criteria.": "Rechercher une personne en utilisant les critères de correspondance.",
"Lookup a lead using match criteria.": "Rechercher un prospect en utilisant des critères de correspondance.",
"Lookup a company.": "Recherche une société.",
"Lookup an opportunity.": "Rechercher une opportunité.",
"Lookup a project.": "Recherche un projet.",
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
"Full Name": "Nom complet",
"Emails": "E-mails",
"Phone Numbers": "Numéros de téléphone",
"Street": "Rue",
"City": "Ville",
"State/Region": "État/Région",
"Postal Code": "Code postal",
"Country": "Pays",
"Person": "Personne",
"Email": "Courriel",
"Category of the email address (e.g., work, personal)": "Catégorie de l'adresse e-mail (par exemple, travail, personnel)",
"Lead": "Prospect",
"Company": "Entreprise",
"Opportunity": "Opportunité",
"Email Domain": "Domaine des E-mails",
"Details": "Détails",
"Primary Contact": "Contact principal",
"Name": "Nom",
"Pipeline": "Pipeline",
"Pipeline Stage": "Étape du pipeline",
"Project": "Votre compte",
"Task Name": "Nom de la tâche",
"Activity Type": "Type d'activité",
"Assignee": "Assignee",
"Related Record Type": "Type d'enregistrement lié",
"Related Record": "Enregistrement lié",
"Due Date/Time": "Date/Heure d'échéance",
"Reminder Date/Time": "Date/heure de rappel",
"Priority": "Priorité",
"Tags": "Tags",
"Parent Entity": "Entité Parente",
"Parent Entity Resource": "Ressource d'Entité Parente",
"Page Size": "Nombre d'élément",
"Page Number": "Numéro de page",
"Minimum Activity Date": "Date minimale d'activité",
"Maximum Activity Date": "Date maximum d'activité",
"Full Result": "Résultat complet",
"Phone Number": "Numéro de téléphone",
"Contact Type": "Type de contact",
"State": "État",
"Socials": "Socials",
"Followed": "Suivi",
"Age": "Âge",
"Sort By": "Trier par",
"Sort Direction": "Direction de tri",
"Minimum Interaction Count": "Nombre minimum d'interactions",
"Maximum Interaction Count": "Nombre maximum d'interactions",
"Minimum Interaction Date": "Date minimale d'interaction",
"Maximum Interaction Date": "Date maximale d'interaction",
"Minimum Created Date": "Date de création minimale",
"Maximum Created Date": "Date de création maximale",
"Lead Status": "Statut du prospect",
"Customer Source": "Source du client",
"Include Converted Leads": "Inclure les prospects convertis",
"Minimum Monetary Value": "Valeur monétaire minimale",
"Maximum Monetary Value": "Valeur monétaire maximale",
"Minimum Modified Date": "Date de modification minimale",
"Maximum Modified Date": "Date de modification maximale",
"Status": "Statut",
"Primary Contacts": "Contacts Principaux",
"Loss Reason": "Raison de la perte",
"Minimum Stage Change Date": "Date minimale de changement d'étape",
"Maximum Stage Change Date": "Date maximale de changement d'étape",
"Method": "Méthode",
"Headers": "Headers",
"Query Parameters": "Paramètres de requête",
"Body": "Body",
"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)",
"select a person": "sélectionner une personne",
"select a Lead": "sélectionner un prospect",
"select a Company": "sélectionner une entreprise",
"select an Opportunity": "sélectionner une opportunité",
"E.g. democompany.com": "Par exemple democompany.com",
"select a primary contact": "sélectionner un contact principal",
"The name of the opportunity": "Le nom de l'opportunité",
"select a Pipeline": "sélectionner un Pipeline",
"Select a stage": "Sélectionnez une étape",
"The name of the project": "Le nom du projet",
"The details of the project": "Les détails du projet",
"select a Project": "sélectionner un projet",
"Details fo this task": "Détails de cette tâche",
"Select activity Type": "Sélectionnez le type d'activité",
"select a user to assign to": "sélectionner un utilisateur à assigner",
"Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).": "Choisissez le type d'enregistrement du cuivre auquel cette tâche doit être liée (par exemple, personne, entreprise, plomb, opportunité ou projet).",
"Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.": "Sélectionnez l'enregistrement spécifique (à partir du type choisi ci-dessus) auquel cette tâche doit être attachée. Par exemple, choisissez la personne ou l'opportunité à laquelle se rapporte la tâche.",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).": "Entrez la date et l'heure au format 24 heures, par exemple `2025-09-09 11:40` (11:40 AM) ou `2025-09-09 13:00` (1:00 PM).",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)": "Entrez la date et l'heure au format 24 heures, par exemple `2025-09-09 11:40` (11:40 AM) ou `2025-09-09 13:00` (1:00 PM)",
"Select parent entity": "Sélectionner l'entité parente",
"Select Resource": "Sélectionner une ressource",
"Default 50. Max 200.": "Par défaut 50. Maximum 200.",
"24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.": "Format 24 heures, par exemple 2025-09-10 11:40. L'horodatage de la date d'activité la plus ancienne.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la dernière date d'activité.",
"(Optional) If set, search performance improves but duplicate activity logs may be returned": "(Facultatif) Si défini, les performances de la recherche s'améliorent, mais les journaux d'activité en double peuvent être retournés",
"Full name of the People to search for.": "Nom complet du peuple à rechercher.",
"Phone Number of the People to search for.": "Numéro de téléphone des personnes à rechercher.",
"Emails of the People to search for.": "Emails du peuple à rechercher.",
"Select contact Type": "Sélectionner le type de contact",
"select assignees": "sélectionner les personnes assignées",
"select Companies": "sélectionner Entreprises",
"select Opportunities": "sélectionner les opportunités",
"The city in which People must be located.": "La ville dans laquelle les gens doivent être situés.",
"The state or province in which People must be located.": "L'état ou la province dans laquelle les personnes doivent être situées.",
"The postal code in which People must be located.": "Le code postal dans lequel les gens doivent être localisés.",
"The two character country code where People must be located.": "Le code pays à deux caractères où les gens doivent être localisés.",
"Filter People to those that match at least one of the tags specified.": "Filtrer les personnes à celles qui correspondent à au moins un des tags spécifiés.",
"Filter People to those that match at least one of the social accounts specified.": "Filtrer les personnes à celles qui correspondent à au moins un des comptes sociaux spécifiés.",
"Filter by followed state": "Filtrer par état suivi",
"The maximum age in seconds that People must be.": "L'âge maximum en secondes que les gens doivent être.",
"The field on which to sort the results": "Le champ sur lequel trier les résultats",
"The direction in which to sort the result": "La direction dans laquelle trier le résultat",
"The minimum number of interactions People must have had.": "Le nombre minimum d'interactions que les gens doivent avoir.",
"The maximum number of interactions People must have had.": "Le nombre maximum d'interactions que les gens doivent avoir.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date la plus ancienne de la dernière interaction.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la dernière date de la dernière interaction.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la première date de création des personnes.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date à laquelle les gens sont créés.",
"Full name of the Lead to search for.": "Nom complet du prospect à rechercher.",
"Phone Number of the Lead to search for.": "Numéro de téléphone du prospect à rechercher.",
"Emails of the Lead to search for.\t": "E-mails du prospect à rechercher\t",
"Select lead status": "Sélectionnez le statut du prospect",
"Select customer source.": "Sélectionnez la source du client.",
"The city in which Lead must be located.": "La ville dans laquelle le plomb doit être situé.",
"The state or province in which Lead must be located.": "L'état ou la province dans laquelle le plomb doit être situé.",
"The postal code in which Lead must be located.": "Le code postal dans lequel le plomb doit être situé.",
"The two character country code where Lead must be located.": "Le code pays de deux caractères où le prospect doit être situé.",
"Filter Lead to those that match at least one of the tags specified.": "Filtrer le prospect à ceux qui correspondent à au moins un des tags spécifiés.",
"Filter Lead to those that match at least one of the social accounts specified.": "Filtrer le prospect à ceux qui correspondent à au moins un des comptes sociaux spécifiés.",
"The maximum age in seconds that Lead must be.": "L'âge maximum en secondes que doit être le plomb.",
"Specify if response should contain converted leads.": "Spécifie si la réponse doit contenir des prospects convertis.",
"The minimum monetary value Leads must have.": "La valeur monétaire minimale des plombs doit avoir.",
"The maximum monetary value Leads must have.": "La valeur monétaire maximale que doivent avoir.",
"The minimum number of interactions Lead must have had.": "Le nombre minimum d'interactions que le plomb a dû avoir.",
"The maximum number of interactions Lead must have had.": "Le nombre maximum d'interactions que le plomb doit avoir.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.": "Format 24 heures sur 24, par exemple 2025-09-10 13:00. L'horodatage de la date la plus ancienne de création du plomb.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date la plus récente est créé.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date la plus ancienne de modification du prospect est modifiée.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date la plus récente est modifiée.",
"Full name of the Company to search for.": "Nom complet de la Société à rechercher.",
"Phone Number of the Company to search for.": "Numéro de téléphone de la société à rechercher.",
"Email Domain of the Company to search for.": "Domaine de messagerie de la société à rechercher.",
"The city in which Company must be located.": "La ville dans laquelle la compagnie doit être située.",
"The state or province in which Company must be located.": "L'état ou la province dans laquelle la compagnie doit être située.",
"The postal code in which Company must be located.": "Le code postal dans lequel la société doit être située.",
"The two character country code where Company must be located.": "Le code pays de deux caractères où la société doit être située.",
"Filter Company to those that match at least one of the tags specified.": "Filtrer la société à celles qui correspondent à au moins un des tags spécifiés.",
"Filter Company to those that match at least one of the social accounts specified.": "Filtrer la société à ceux qui correspondent à au moins un des comptes sociaux spécifiés.",
"The maximum age in seconds that Company must be.": "L'âge maximum en secondes que la société doit être.",
"The minimum number of interactions Company must have had.": "Le nombre minimum d'interactions que la société a dû avoir.",
"The maximum number of interactions Company must have had.": "Le nombre maximum d'interactions que la Société a dû avoir.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date la plus ancienne de création de la société.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la dernière date de création de la société.",
"Full name of the Opportunity to search for.": "Nom complet de l'opportunité à rechercher.",
"Filter by Opportunity status": "Filtrer par statut d'opportunité",
"select primary contacts": "sélectionner les contacts principaux",
"Select loss reason.": "Sélectionnez la raison de la perte.",
"The minimum monetary value Opportunities must have.": "La valeur monétaire minimale des opportunités doit avoir.",
"The maximum monetary value Opportunities must have.": "La valeur monétaire maximale que doivent avoir les opportunités.",
"The minimum number of interactions Opportunity must have had.": "Le nombre minimum d'interactions a dû être atteint par l'opportunité.",
"The maximum number of interactions Opportunity must have had.": "Le nombre maximum d'interactions que l'Occasion a dû avoir.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date de clôture la plus ancienne.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date de clôture la plus récente.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date la plus ancienne d'un changement d'étape.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la dernière date d'un changement de étape.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date la plus ancienne Occasion est créée.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date la plus récente Occasion est créée.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date la plus ancienne d'Affaire est modifiée.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.": "Format 24 heures, par exemple 2025-09-10 13:00. L'horodatage de la date la plus récente Occasion est modifiée.",
"Authorization headers are injected automatically from your connection.": "Les Headers 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.",
"None": "Aucun",
"Low": "Bas",
"Medium": "Moyenne",
"High": "Élevé",
"Task": "Tâche",
"followed": "suivis",
"not followed": "non suivi",
"Title": "Titre de la feuille de calcul",
"Phone": "Téléphone",
"Date Modified": "Date de modification",
"Date Created": "Date de création",
"Zip": "Code postal",
"Ascending": "Ascendant",
"Descending": "Descendant",
"Company Name": "Nom de lentreprise",
"Value": "Valeur",
"Inactive Days": "Jours inactifs",
"Contact": "Contacter",
"Contact First Name": "Prénom du contact",
"Contact Last Name": "Nom du contact",
"Contact Group": "Groupe de contacts",
"Last Interaction": "Dernière interaction",
"Interaction Count": "Nombre d'interactions",
"Primary Website": "Site Web principal",
"Open": "Ouvert",
"Won": "Gagné",
"Lost": "Perdu",
"Abandoned": "Abandonné",
"Customer Source ID": "ID de la source du client",
"Monetary Unit": "Unité monétaire",
"Monetary Value": "Valeur monétaire",
"Stage": "Étape",
"Completed": "Terminé",
"Assigned To": "Assigné à",
"Related To": "Lié à",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Activity": "Nouvelle activité",
"New Person": "Nouvelle Personne",
"New Lead": "Nouveau prospect",
"New Task": "Nouvelle tâche",
"Updated Lead": "Prospect mis à jour",
"Updated Task": "Tâche mise à jour",
"Updated Opportunity": "Affaire mise à jour",
"Updated Opportunity Stage": "Étape d'Affaire mise à jour",
"Updated Opportunity Status": "Mise à jour du statut d'opportunité",
"Updated Project": "Projet mis à jour",
"Updated Lead Status": "Statut du prospect mis à jour",
"Triggers when a new activity is logged": "Déclenche quand une nouvelle activité est loguée",
"Triggers when a new person/contact is created.": "Déclenche quand une nouvelle personne/contact est créée.",
"Triggers when a new lead is created.": "Déclenche lorsqu'un nouveau prospect est créé.",
"Triggers when a new task is created.": "Déclenche quand une nouvelle tâche est créée.",
"Triggers when a lead is modified.": "Déclenche lorsqu'un prospect est modifié.",
"Triggers when a task is updated.": "Déclenche quand une tâche est mise à jour.",
"Triggers when an opportunity changes.": "Déclenche quand une opportunité change.",
"Triggers when an opportunity stage changes": "Déclenche quand une étape d'opportunité change",
"Triggers when an opportunity's status changes.": "Déclenche quand le statut d'une opportunité change.",
"Triggers when a project is updated.": "Déclenche lorsqu'un projet est mis à jour.",
"Triggers when the status of a lead changes.": "Déclenche lorsque le statut d'un prospect change."
}

View File

@@ -0,0 +1,280 @@
{
"Email Address": "メールアドレス",
"API Key": "API キー",
"Email Address of the Token Owner": "トークン所有者のメールアドレス",
"Your API Key in settings > integrations": "設定 > 統合",
"Create Person": "ユーザーを作成",
"Update Person": "担当者を更新",
"Create Lead": "リードを作成",
"Update Lead": "潜在顧客を更新",
"Convert Lead": "リードを変換",
"Create Company": "所属を作成",
"Update Company": "所属を更新",
"Create Opportunity": "案件を作成",
"Update Opportunity": "商談を更新",
"Create Project": "プロジェクトを作成",
"Update Project": "プロジェクトを更新",
"Create Task": "タスクを作成",
"Create Activity": "アクティビティを作成",
"Search for an Activity": "アクティビティを検索",
"Search for a Person": "人を検索",
"Search for a Lead": "リードを検索",
"Search for a Company": "会社を検索",
"Search for an Opportunity": "商談を検索",
"Search for a Project": "プロジェクトを検索",
"Custom API Call": "カスタムAPI通話",
"Adds a new person/contact.": "新しい人/連絡先を追加します。",
"Updates a person based on matching criteria.": "一致する条件に基づいて個人を更新します。",
"Adds a new lead.": "新しいリードを追加します。",
"Updates an existing lead.": "既存のリードを更新する。",
"Converts a lead into a person (optionally with company/opportunity).": "リードを人物に変換します(会社/機会とオプション)。",
"Adds a new company.": "新しい会社を追加",
"Updates a company record.": "会社レコードを更新します。",
"Adds a new opportunity.": "新しい機会を追加",
"Updates an opportunity using match criteria.": "一致条件を使用して商談を更新します。",
"Adds a new project.": "新規プロジェクトを追加",
"Updates a project record.": "プロジェクト レコードを更新します。",
"Adds a new task under a person, lead, or opportunity.": "人、リード、または商談の下に新しいタスクを追加します。",
"Logs an activity related to CRM entities.": "CRMエンティティに関連するアクティビティをログに記録します。",
"Find an existing activity by type/criteria.": "タイプ/基準で既存のアクティビティを検索します。",
"Lookup a person using match criteria.": "マッチ条件を使用して人を検索します。",
"Lookup a lead using match criteria.": "一致条件を使用してリードを検索します。",
"Lookup a company.": "会社を探します。",
"Lookup an opportunity.": "機会を探しましょう。",
"Lookup a project.": "プロジェクトを検索します。",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"Full Name": "フルネーム",
"Emails": "E-mail",
"Phone Numbers": "電話番号",
"Street": "番地",
"City": "市区町村名",
"State/Region": "都道府県/地域",
"Postal Code": "郵便番号",
"Country": "国",
"Person": "人",
"Email": "Eメールアドレス",
"Category of the email address (e.g., work, personal)": "Eメールアドレスのカテゴリ (例, 仕事, 個人)",
"Lead": "リード",
"Company": "会社名",
"Opportunity": "機会",
"Email Domain": "メールドメイン",
"Details": "詳細",
"Primary Contact": "主要連絡先",
"Name": "名前",
"Pipeline": "パイプライン",
"Pipeline Stage": "パイプラインステージ",
"Project": "プロジェクト",
"Task Name": "タスク名",
"Activity Type": "活動タイプ",
"Assignee": "Assignee",
"Related Record Type": "関連レコードタイプ",
"Related Record": "関連レコード",
"Due Date/Time": "締切日時",
"Reminder Date/Time": "リマインダーの日時",
"Priority": "優先度",
"Tags": "タグ",
"Parent Entity": "親エンティティ",
"Parent Entity Resource": "親エンティティリソース",
"Page Size": "ページサイズ",
"Page Number": "ページ番号",
"Minimum Activity Date": "最小活動日",
"Maximum Activity Date": "活動日時の上限",
"Full Result": "完全な結果",
"Phone Number": "電話番号",
"Contact Type": "連絡先の種類",
"State": "都道府県:",
"Socials": "Socials",
"Followed": "フォロー中",
"Age": "年齢",
"Sort By": "並び替え",
"Sort Direction": "並べ替え方向",
"Minimum Interaction Count": "最小操作数",
"Maximum Interaction Count": "最大インタラクション数",
"Minimum Interaction Date": "最小操作日",
"Maximum Interaction Date": "最大インタラクション日",
"Minimum Created Date": "作成日時の最小値",
"Maximum Created Date": "作成日時の最大値",
"Lead Status": "リードステータス",
"Customer Source": "顧客ソース",
"Include Converted Leads": "変換済みリードを含める",
"Minimum Monetary Value": "最小通貨価値",
"Maximum Monetary Value": "最大通貨価値",
"Minimum Modified Date": "最小変更日",
"Maximum Modified Date": "最大修正日",
"Status": "ステータス",
"Primary Contacts": "主要連絡先",
"Loss Reason": "損失の理由",
"Minimum Stage Change Date": "最小ステージ変更日",
"Maximum Stage Change Date": "最大ステージ変更日",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"select a person": "人を選択",
"select a Lead": "リードを選択",
"select a Company": "所属を選択",
"select an Opportunity": "商談を選択",
"E.g. democompany.com": "例: democompany.com",
"select a primary contact": "プライマリ・コンタクトを選択",
"The name of the opportunity": "商談の名前",
"select a Pipeline": "パイプラインを選択",
"Select a stage": "ステージを選択",
"The name of the project": "プロジェクトの名前",
"The details of the project": "プロジェクトの詳細",
"select a Project": "プロジェクトを選択",
"Details fo this task": "このタスクの詳細",
"Select activity Type": "アクティビティの種類を選択",
"select a user to assign to": "割り当てるユーザーを選択します",
"Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).": "このタスクをリンクする銅レコードの種類を選択します(個人、会社、リード、商談、またはプロジェクトなど)。",
"Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.": "このタスクに添付する特定のレコード(上の選択したタイプから)を選択します。 たとえば、タスクに関連する人または機会を選択します。",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).": "`2025-09-09 11:40` (11:40 AM) または `2025-09-09 13:00` (午後1:00 PM) など、24 時間形式で日付と時刻を入力します。",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)": "24時間形式で日付と時刻を入力します。例えば、`2025-09-09 11:40` (11:40 AM) または `2025-09-09 13:00` (午後1:00 PM)",
"Select parent entity": "親エンティティを選択",
"Select Resource": "リソースを選択",
"Default 50. Max 200.": "デフォルトの50。最大200。",
"24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.": "24時間形式、例: 2025-09-10 11:40。最も古いアクティビティ日時のタイムスタンプ。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.": "24 時間形式, 例: 2025-09-10 13:00. 最新のアクティビティ日時のタイムスタンプ。",
"(Optional) If set, search performance improves but duplicate activity logs may be returned": "(オプション)設定した場合、検索パフォーマンスは向上しますが、重複したアクティビティログが返される可能性があります。",
"Full name of the People to search for.": "検索する人物のフルネーム。",
"Phone Number of the People to search for.": "検索する人物の電話番号",
"Emails of the People to search for.": "検索する人々の電子メール。",
"Select contact Type": "連絡先の種類を選択",
"select assignees": "担当者を選択",
"select Companies": "企業を選択",
"select Opportunities": "商談を選択",
"The city in which People must be located.": "人々が位置している必要がある都市。",
"The state or province in which People must be located.": "Peopleが所在する州または州。",
"The postal code in which People must be located.": "Peopleが所在する郵便番号。",
"The two character country code where People must be located.": "Peopleが存在する必要がある2文字の国コード。",
"Filter People to those that match at least one of the tags specified.": "指定されたタグの少なくとも 1 つに一致するユーザにフィルタリングします。",
"Filter People to those that match at least one of the social accounts specified.": "指定されたソーシャルアカウントの少なくとも1つに一致するユーザーにフィルタリングします。",
"Filter by followed state": "フォロー中の状態でフィルター",
"The maximum age in seconds that People must be.": "人がする必要があります秒単位の最大年齢。",
"The field on which to sort the results": "結果をソートするフィールド",
"The direction in which to sort the result": "結果を並べ替える方向",
"The minimum number of interactions People must have had.": "人々が持っていたに違いない相互作用の最小数。",
"The maximum number of interactions People must have had.": "人々が持っていた相互作用の最大数。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.": "24時間形式、例: 2025-09-10 13:00。最後の操作の最初の日付のタイムスタンプ。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.": "24 時間形式, 例: 2025-09-10 13:00. 最後の操作の最新日付のタイムスタンプ。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.": "24時間形式、例: 2025-09-10 13:00。最も古い日付のタイムスタンプが作成されます。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.": "24時間形式, 例: 2025-09-10 13:00. 最新の日付のタイムスタンプが作成されます.",
"Full name of the Lead to search for.": "検索するリードのフルネーム。",
"Phone Number of the Lead to search for.": "検索するリードの電話番号。",
"Emails of the Lead to search for.\t": "検索するリードのメール\t",
"Select lead status": "リードのステータスを選択",
"Select customer source.": "顧客ソースを選択します。",
"The city in which Lead must be located.": "リードが置かなければならない都市。",
"The state or province in which Lead must be located.": "リードを置く必要がある州または州。",
"The postal code in which Lead must be located.": "リードが所在する郵便番号。",
"The two character country code where Lead must be located.": "リードを配置する必要がある2文字の国コード。",
"Filter Lead to those that match at least one of the tags specified.": "指定されたタグの少なくとも1つに一致するものにリードを絞り込みます。",
"Filter Lead to those that match at least one of the social accounts specified.": "指定されたソーシャルアカウントの少なくとも1つに一致するアカウントにリードを絞り込みます。",
"The maximum age in seconds that Lead must be.": "リードの最大年齢は数秒でなければなりません。",
"Specify if response should contain converted leads.": "レスポンスに変換されたリードを含めるかどうかを指定します。",
"The minimum monetary value Leads must have.": "リードが持っている最低限の金銭的価値。",
"The maximum monetary value Leads must have.": "リードの最大貨幣価値は必須である。",
"The minimum number of interactions Lead must have had.": "相互作用リードの最小数があったに違いありません。",
"The maximum number of interactions Lead must have had.": "リード相互作用の最大数があった必要があります。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.": "24時間形式, 例: 2025-09-10 13:00. リードの最も古い日付のタイムスタンプが作成されます.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.": "24時間形式, 例: 2025-09-10 13:00. 最新の日付リードのタイムスタンプが作成されます.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.": "24時間形式, 例: 2025-09-10 13:00. リードの最も古い日付のタイムスタンプが変更されます。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.": "24時間形式, 例: 2025-09-10 13:00. 最新の日付「リード」のタイムスタンプが変更されます。",
"Full name of the Company to search for.": "検索する会社のフルネーム。",
"Phone Number of the Company to search for.": "検索する会社の電話番号。",
"Email Domain of the Company to search for.": "検索する会社のメールドメイン。",
"The city in which Company must be located.": "会社が設置されなければならない市町村。",
"The state or province in which Company must be located.": "会社が設立されなければならない州または州。",
"The postal code in which Company must be located.": "会社が所在する郵便番号。",
"The two character country code where Company must be located.": "会社が存在する必要がある2文字の国コード。",
"Filter Company to those that match at least one of the tags specified.": "指定されたタグの少なくとも 1 つに一致するものに会社をフィルタリングします。",
"Filter Company to those that match at least one of the social accounts specified.": "指定されたソーシャルアカウントの少なくとも1つに一致するアカウントに会社をフィルタリングします。",
"The maximum age in seconds that Company must be.": "会社がする必要があります秒単位の最大年齢。",
"The minimum number of interactions Company must have had.": "企業とのやり取りの最小数があったに違いありません。",
"The maximum number of interactions Company must have had.": "カンパニーが持っていた相互作用の最大数。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.": "24時間形式, 例: 2025-09-10 13:00. 会社の最も古い日付のタイムスタンプが作成されます.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.": "24時間形式, 例: 2025-09-10 13:00. 最新の日付会社のタイムスタンプが作成されます.",
"Full name of the Opportunity to search for.": "検索する商談のフルネーム。",
"Filter by Opportunity status": "案件状況でフィルター",
"select primary contacts": "プライマリの連絡先を選択",
"Select loss reason.": "損失の理由を選択してください。",
"The minimum monetary value Opportunities must have.": "最小貨幣価値の機会は持たなければなりません。",
"The maximum monetary value Opportunities must have.": "機会の最大貨幣価値が必要です。",
"The minimum number of interactions Opportunity must have had.": "インタラクション機会の最小数があったに違いありません。",
"The maximum number of interactions Opportunity must have had.": "インタラクション機会の最大数があったに違いありません。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.": "24時間形式、例: 2025-09-10 13:00。最も古い終了日のタイムスタンプ。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.": "24 時間形式, 例: 2025-09-10 13:00. 最新の日付終了日のタイムスタンプ。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.": "24 時間形式, 例: 2025-09-10 13:00. ステージ変更の最初の日付のタイムスタンプ。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.": "24 時間形式, 例: 2025-09-10 13:00. ステージ変更の最新日付のタイムスタンプ。",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.": "24時間形式, 例: 2025-09-10 13:00. 最も古い日付のタイムスタンプが作成されます.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.": "24時間形式, 例: 2025-09-10 13:00. 最新の日付のタイムスタンプが作成されます.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.": "24時間形式, 例: 2025-09-10 13:00. 最も古い日付のタイムスタンプが変更されます.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.": "24時間形式, 例: 2025-09-10 13:00. 最新の日付のタイムスタンプが変更されます.",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"None": "なし",
"Low": "低い",
"Medium": "ミディアム",
"High": "高い",
"Task": "タスク",
"followed": "フォローしました",
"not followed": "フォローしていません",
"Title": "タイトル",
"Phone": "電話番号",
"Date Modified": "変更日",
"Date Created": "作成日",
"Zip": "郵便番号",
"Ascending": "昇順",
"Descending": "降順",
"Company Name": "会社名",
"Value": "値",
"Inactive Days": "アクティブでない日数",
"Contact": "お問い合わせ",
"Contact First Name": "連絡先名",
"Contact Last Name": "連絡先の姓",
"Contact Group": "連絡先グループ",
"Last Interaction": "前回の相互作用",
"Interaction Count": "インタラクション数",
"Primary Website": "プライマリウェブサイト",
"Open": "開く",
"Won": "獲得日",
"Lost": "失われた",
"Abandoned": "放棄されました",
"Customer Source ID": "顧客ソースID",
"Monetary Unit": "通貨単位",
"Monetary Value": "金銭的価値",
"Stage": "ステージ",
"Completed": "完了",
"Assigned To": "割り当て先",
"Related To": "関連先",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭",
"New Activity": "新しいアクティビティ",
"New Person": "新しい人",
"New Lead": "新しいリード",
"New Task": "新しいタスク",
"Updated Lead": "更新されたリード",
"Updated Task": "更新されたタスク",
"Updated Opportunity": "更新された機会",
"Updated Opportunity Stage": "更新された商談ステージ",
"Updated Opportunity Status": "更新された商談ステータス",
"Updated Project": "更新されたプロジェクト",
"Updated Lead Status": "更新された見込み客ステータス",
"Triggers when a new activity is logged": "新しいアクティビティが記録されたときにトリガーします",
"Triggers when a new person/contact is created.": "新しい人/連絡先が作成されたときにトリガーします。",
"Triggers when a new lead is created.": "新しいリードが作成されたときにトリガーします。",
"Triggers when a new task is created.": "新しいタスクが作成されたときにトリガーされます。",
"Triggers when a lead is modified.": "リードが変更されたときにトリガーします。",
"Triggers when a task is updated.": "タスクが更新されたときにトリガーされます。",
"Triggers when an opportunity changes.": "商談が変更されたときにトリガーします。",
"Triggers when an opportunity stage changes": "商談ステージが変更されたときにトリガーします",
"Triggers when an opportunity's status changes.": "商談のステータスが変更されたときに発生します。",
"Triggers when a project is updated.": "プロジェクトが更新されたときにトリガーします。",
"Triggers when the status of a lead changes.": "リードのステータスが変更されたときにトリガーします。"
}

View File

@@ -0,0 +1,280 @@
{
"Email Address": "Uw e-mailadres",
"API Key": "API Sleutel",
"Email Address of the Token Owner": "E-mailadres van de tokeneigenaar",
"Your API Key in settings > integrations": "Uw API-sleutel in instellingen > integraties",
"Create Person": "Maak persoon aan",
"Update Person": "Update Persoon",
"Create Lead": "Maak Lead",
"Update Lead": "Lead bijwerken",
"Convert Lead": "Converteer Lead",
"Create Company": "Bedrijf aanmaken",
"Update Company": "Bedrijf bijwerken",
"Create Opportunity": "Verkoopkans creëren",
"Update Opportunity": "Update Verkoopkans",
"Create Project": "Project aanmaken",
"Update Project": "Project bijwerken",
"Create Task": "Taak maken",
"Create Activity": "Activiteit aanmaken",
"Search for an Activity": "Een activiteit zoeken",
"Search for a Person": "Zoek naar een persoon",
"Search for a Lead": "Zoek naar een Lead",
"Search for a Company": "Zoek een bedrijf",
"Search for an Opportunity": "Zoek naar een kans",
"Search for a Project": "Zoek naar een project",
"Custom API Call": "Custom API Call",
"Adds a new person/contact.": "Voegt een nieuwe persoon/contactpersoon toe.",
"Updates a person based on matching criteria.": "Werkt een persoon bij op basis van overeenkomende criteria.",
"Adds a new lead.": "Voegt een nieuwe lead toe.",
"Updates an existing lead.": "Werkt een bestaande lead bij.",
"Converts a lead into a person (optionally with company/opportunity).": "Zet een lead om in een persoon (optioneel met bedrijf/opportuniteit).",
"Adds a new company.": "Voegt een nieuw bedrijf toe.",
"Updates a company record.": "Werkt een bedrijfsrecord bij.",
"Adds a new opportunity.": "Voegt een nieuwe kans toe.",
"Updates an opportunity using match criteria.": "Werkt een kans bij met behulp van overeenkomstcriteria.",
"Adds a new project.": "Voegt een nieuw project toe.",
"Updates a project record.": "Werkt een projectrecord bij.",
"Adds a new task under a person, lead, or opportunity.": "Voegt een nieuwe taak toe onder een persoon, leider of kans.",
"Logs an activity related to CRM entities.": "Logs een activiteit gerelateerd aan CRM-entiteiten.",
"Find an existing activity by type/criteria.": "Zoek een bestaande activiteit op type/criteria.",
"Lookup a person using match criteria.": "Zoek een persoon op met behulp van wedstrijdcriteria.",
"Lookup a lead using match criteria.": "Zoek een lead met behulp van wedstrijdcriteria.",
"Lookup a company.": "Zoek een bedrijf.",
"Lookup an opportunity.": "Zoek een kans.",
"Lookup a project.": "Zoek een project.",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"Full Name": "Volledige naam",
"Emails": "E-mails",
"Phone Numbers": "Telefoon nummers",
"Street": "Straat",
"City": "Woonplaats",
"State/Region": "Staat/regio",
"Postal Code": "Postcode - Postcode",
"Country": "Land:",
"Person": "Persoon",
"Email": "E-mail",
"Category of the email address (e.g., work, personal)": "Categorie van het e-mailadres (bijv. werk, persoonlijk)",
"Lead": "Lood",
"Company": "Bedrijfsnaam",
"Opportunity": "Kans",
"Email Domain": "E-mail domein",
"Details": "Beschrijving",
"Primary Contact": "Primair contact",
"Name": "Naam",
"Pipeline": "Pijplijn",
"Pipeline Stage": "Pijplijn stadium",
"Project": "Project",
"Task Name": "Taak naam",
"Activity Type": "Type activiteit",
"Assignee": "Assignee",
"Related Record Type": "Verwante Record Type",
"Related Record": "Gerelateerde Record",
"Due Date/Time": "Vervaldatum / tijd",
"Reminder Date/Time": "Herinnering datum/tijd",
"Priority": "Prioriteit",
"Tags": "Labels",
"Parent Entity": "Bovenliggende entiteit",
"Parent Entity Resource": "Bovenliggende entiteit bron",
"Page Size": "Paginagrootte",
"Page Number": "Pagina Nummer",
"Minimum Activity Date": "Minimale Activiteit Datum",
"Maximum Activity Date": "Maximale Activiteit Datum",
"Full Result": "Volledig resultaat",
"Phone Number": "Telefoon nummer",
"Contact Type": "Type contactpersoon",
"State": "Provincie",
"Socials": "Socials",
"Followed": "Gevolgd",
"Age": "Leeftijd",
"Sort By": "Sorteren op",
"Sort Direction": "Sorteer richting",
"Minimum Interaction Count": "Minimum aantal interacties",
"Maximum Interaction Count": "Maximale Interactie Aantal",
"Minimum Interaction Date": "Minimale interactie datum",
"Maximum Interaction Date": "Maximale interactie datum",
"Minimum Created Date": "Minimum Aanmaakdatum",
"Maximum Created Date": "Maximale Aanmaakdatum",
"Lead Status": "Status lead",
"Customer Source": "Klant bron",
"Include Converted Leads": "Inclusief geconverteerde Leads",
"Minimum Monetary Value": "Minimale monetaire waarde",
"Maximum Monetary Value": "Maximale Monetaire waarde",
"Minimum Modified Date": "Minimale wijzigingsdatum",
"Maximum Modified Date": "Maximale wijzigingsdatum",
"Status": "status",
"Primary Contacts": "Primaire contactpersonen",
"Loss Reason": "Verlies Reden",
"Minimum Stage Change Date": "Minimale Fase Wijzigingsdatum",
"Maximum Stage Change Date": "Maximale datum wijzigen fase",
"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)",
"select a person": "Selecteer een persoon",
"select a Lead": "selecteer een Lead",
"select a Company": "selecteer een bedrijf",
"select an Opportunity": "selecteer een kans",
"E.g. democompany.com": "Bijvoorbeeld demobedrijf.nl",
"select a primary contact": "Selecteer een primair contact",
"The name of the opportunity": "De naam van de mogelijkheid",
"select a Pipeline": "Selecteer een Pijplijn",
"Select a stage": "Selecteer een fase",
"The name of the project": "De naam van het project",
"The details of the project": "De details van het project",
"select a Project": "selecteer een project",
"Details fo this task": "Details van deze taak",
"Select activity Type": "Selecteer activiteitstype",
"select a user to assign to": "Selecteer een gebruiker aan toe te wijzen",
"Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).": "Kies het type koper record waar deze taak aan gekoppeld moet worden (bijv. persoon, Bedrijf, Leiding, Opportunity, of Project).",
"Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.": "Selecteer het specifieke record (uit het gekozen type hierboven) waaraan deze taak moet worden gekoppeld. Kies bijvoorbeeld de persoon of de kans waar de taak betrekking op heeft.",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).": "Voer datum en tijd in in 24-uurs formaat, bijv. `2025-09-09 11:40` (11:40 AM) of `2025-09-09 13:00` (1:00 PM).",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)": "Voer datum en tijd in in 24-uurs formaat, bijv. `2025-09-09 11:40` (11:40 AM) of `2025-09-09 13:00` (1:00 PM)",
"Select parent entity": "Selecteer bovenliggende entiteit",
"Select Resource": "Selecteer Document",
"Default 50. Max 200.": "Standaard 50. Max 200.",
"24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.": "24-uurs formaat, b.v. 2025-09-10 11:40. De tijdstempel van de vroegste activiteit datum.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van de laatste activiteit datum.",
"(Optional) If set, search performance improves but duplicate activity logs may be returned": "(Optioneel) Indien ingesteld verbetert de zoekprestatie, maar dubbele activiteit logs kunnen worden teruggegeven",
"Full name of the People to search for.": "De volledige naam van de mensen waarnaar gezocht moet worden.",
"Phone Number of the People to search for.": "Telefoonnummer van mensen waarnaar gezocht moet worden.",
"Emails of the People to search for.": "E-mails van de mensen waarnaar gezocht moet worden.",
"Select contact Type": "Selecteer contact type",
"select assignees": "selecteer verantwoordelijke personen",
"select Companies": "Bedrijven selecteren",
"select Opportunities": "selecteer kansen",
"The city in which People must be located.": "De stad waar mensen gevestigd moeten zijn.",
"The state or province in which People must be located.": "De staat of provincie waar mensen gevestigd moeten zijn.",
"The postal code in which People must be located.": "De postcode waarin mensen zich moeten bevinden.",
"The two character country code where People must be located.": "De landcode van twee tekens moet zich vestigen.",
"Filter People to those that match at least one of the tags specified.": "Filter mensen op diegene die ten minste één van de opgegeven tags hebben.",
"Filter People to those that match at least one of the social accounts specified.": "Filter mensen op mensen die overeenkomen met ten minste één van de opgegeven sociale accounts.",
"Filter by followed state": "Filter op gevolgde status",
"The maximum age in seconds that People must be.": "De maximale leeftijd in seconden die mensen moeten hebben.",
"The field on which to sort the results": "Het veld waarop de resultaten gesorteerd moeten worden",
"The direction in which to sort the result": "De richting waarin het resultaat gesorteerd moet worden",
"The minimum number of interactions People must have had.": "Het minimum aantal interacties dat mensen moeten hebben gehad.",
"The maximum number of interactions People must have had.": "Het maximale aantal interacties dat mensen hebben gehad.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.": "24-uurs formaat, bijvoorbeeld 2025-09-10 13:00. De tijdstempel van de vroegste datum van de laatste interactie.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.": "24-uurs formaat, bijv. 2025-09-10 13:00. De tijdstempel van de laatste datum van de laatste interactie.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.": "24-uurs formaat, bijv. 2025-09-10 13:00. De tijdstempel van de vroegste datum mensen worden aangemaakt.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van de laatste datum mensen zijn aangemaakt.",
"Full name of the Lead to search for.": "Volledige naam van de Lead waarnaar gezocht moet worden.",
"Phone Number of the Lead to search for.": "Telefoonnummer van de Lead waarnaar gezocht moet worden.",
"Emails of the Lead to search for.\t": "E-mails van de Lead om naar te zoeken\t",
"Select lead status": "Lead status selecteren",
"Select customer source.": "Selecteer klant bron.",
"The city in which Lead must be located.": "De stad waar lead moet worden gevestigd.",
"The state or province in which Lead must be located.": "De staat of provincie waar de lead moet worden gevestigd.",
"The postal code in which Lead must be located.": "De postcode waar Lead zich in moet bevinden.",
"The two character country code where Lead must be located.": "De landcode van twee karakters moet worden gevestigd.",
"Filter Lead to those that match at least one of the tags specified.": "Filter lead naar diegene die overeenkomen met minstens één van de tags gespecificeerd.",
"Filter Lead to those that match at least one of the social accounts specified.": "Filter lead naar degenen die overeenkomen met ten minste één van de opgegeven sociale accounts.",
"The maximum age in seconds that Lead must be.": "De maximale leeftijd in seconden die lead moet zijn.",
"Specify if response should contain converted leads.": "Geef aan of reactie geconverteerde lood moet bevatten.",
"The minimum monetary value Leads must have.": "De minimale monetaire waarde Leads moet zijn.",
"The maximum monetary value Leads must have.": "De maximale monetaire waarde Leads moet zijn.",
"The minimum number of interactions Lead must have had.": "Het minimumaantal leiding voor interacties moet zijn geweest.",
"The maximum number of interactions Lead must have had.": "Het maximale aantal steekpenningen dat geleid heeft moeten hebben.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van de begindatum wordt aangemaakt.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van de laatste datum Lead is aangemaakt.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.": "24-uurs formaat, bijvoorbeeld 2025-09-10 13:00. De tijdstempel van de vroegste datum Lead wordt aangepast.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van de laatste datum Lead is gewijzigd.",
"Full name of the Company to search for.": "Volledige naam van het bedrijf waarnaar gezocht moet worden.",
"Phone Number of the Company to search for.": "Telefoonnummer van het bedrijf waarnaar gezocht moet worden.",
"Email Domain of the Company to search for.": "E-maildomein van het bedrijf waar naar gezocht moet worden.",
"The city in which Company must be located.": "De stad waar het bedrijf zich moet vestigen.",
"The state or province in which Company must be located.": "De staat of provincie waarin het bedrijf moet worden gevestigd.",
"The postal code in which Company must be located.": "De postcode waarin het bedrijf moet worden gevestigd.",
"The two character country code where Company must be located.": "De twee karakterlandcode waar het bedrijf moet worden gevestigd.",
"Filter Company to those that match at least one of the tags specified.": "Filter bedrijf op diegene die ten minste één van de opgegeven tags overeenkomen.",
"Filter Company to those that match at least one of the social accounts specified.": "Filter bedrijf op degenen die overeenkomen met ten minste één van de opgegeven sociale accounts.",
"The maximum age in seconds that Company must be.": "De maximale leeftijd in seconden dat Bedrijf moet zijn.",
"The minimum number of interactions Company must have had.": "Het minimumaantal interacties dat de onderneming heeft gehad.",
"The maximum number of interactions Company must have had.": "Het maximale aantal interacties bedrijf moet gehad hebben.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.": "24-uurs formaat, bijv. 2025-09-10 13:00. De tijdstempel van het vroegste bedrijf wordt aangemaakt.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van het laatste bedrijf worden aangemaakt.",
"Full name of the Opportunity to search for.": "Volledige naam van de Mogelijkheid om naar te zoeken.",
"Filter by Opportunity status": "Filter op Kans status",
"select primary contacts": "primaire contacten selecteren",
"Select loss reason.": "Selecteer verlies reden.",
"The minimum monetary value Opportunities must have.": "De minimale monetaire waarde Kansen moeten hebben.",
"The maximum monetary value Opportunities must have.": "De maximale monetaire waarde Kansen moeten hebben.",
"The minimum number of interactions Opportunity must have had.": "Het minimum aantal interacties Mogelijkheid moet zijn geweest.",
"The maximum number of interactions Opportunity must have had.": "Het maximale aantal interacties Mogelijkheid moet zijn geweest.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van de vroegste datum van sluiting.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.": "24-uurs formaat, bijv. 2025-09-10 13:00. De tijdstempel van de laatste datum van sluitingsdatum.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.": "24-uurs formaat, bijvoorbeeld 2025-09-10 13:00. De tijdstempel van de vroegste datum van wijziging van de fase.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van de laatste datum van wijziging van de fase.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.": "24-uurs formaat, bijv. 2025-09-10 13:00. De tijdstempel van de vroegste datum Mogelijkheid wordt gemaakt.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van de laatste datum Mogelijkheid is aangemaakt.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van de vroegste datum Mogelijkheid wordt gewijzigd.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.": "24-uurs formaat, b.v. 2025-09-10 13:00. De tijdstempel van de laatste datum Mogelijkheid wordt gewijzigd.",
"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..",
"None": "geen",
"Low": "laag",
"Medium": "Middelgroot",
"High": "hoog",
"Task": "Opdracht",
"followed": "gevolgd",
"not followed": "niet gevolgd",
"Title": "Aanspreektitel",
"Phone": "Telefoonnummer",
"Date Modified": "Datum gewijzigd",
"Date Created": "Datum aangemaakt",
"Zip": "Postcode",
"Ascending": "Oplopend",
"Descending": "Aflopend",
"Company Name": "Bedrijfsnaam",
"Value": "Waarde",
"Inactive Days": "Dagen inactief",
"Contact": "Contactpersoon",
"Contact First Name": "Voornaam contactpersoon",
"Contact Last Name": "Achternaam contactpersoon",
"Contact Group": "Contactpersonen groep",
"Last Interaction": "Laatste interactie",
"Interaction Count": "Aantal interacties",
"Primary Website": "Primaire website",
"Open": "Open",
"Won": "Gewonnen",
"Lost": "Verloren",
"Abandoned": "Verlaten",
"Customer Source ID": "Klant bron ID",
"Monetary Unit": "Monetaire eenheid",
"Monetary Value": "Monetaire waarde",
"Stage": "Speelveld",
"Completed": "Voltooid",
"Assigned To": "Toegewezen Aan",
"Related To": "Gerelateerd aan",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD",
"New Activity": "Nieuwe activiteit",
"New Person": "Nieuw persoon",
"New Lead": "Nieuwe Lead",
"New Task": "Nieuwe taak",
"Updated Lead": "Bijgewerkt Lead",
"Updated Task": "Taak bijgewerkt",
"Updated Opportunity": "Bijgewerkte kans",
"Updated Opportunity Stage": "Gelegenheid fase bijgewerkt",
"Updated Opportunity Status": "Gelegenheid bijgewerkt",
"Updated Project": "Project bijgewerkt",
"Updated Lead Status": "Bijgewerkt Lead Status",
"Triggers when a new activity is logged": "Triggert wanneer een nieuwe activiteit wordt gelogd",
"Triggers when a new person/contact is created.": "Triggert wanneer een nieuwe persoon/contactpersoon wordt aangemaakt.",
"Triggers when a new lead is created.": "Triggert wanneer een nieuwe lead wordt gemaakt.",
"Triggers when a new task is created.": "Triggert wanneer een nieuwe taak is aangemaakt.",
"Triggers when a lead is modified.": "Triggert wanneer een lead is gewijzigd.",
"Triggers when a task is updated.": "Triggert wanneer een taak is bijgewerkt.",
"Triggers when an opportunity changes.": "Triggert wanneer een gelegenheid verandert.",
"Triggers when an opportunity stage changes": "Triggert wanneer een kansstadium verandert",
"Triggers when an opportunity's status changes.": "Triggert wanneer de status van een opportuniteit verandert.",
"Triggers when a project is updated.": "Triggert wanneer een project wordt bijgewerkt.",
"Triggers when the status of a lead changes.": "Triggert wanneer de status van een lead verandert."
}

View File

@@ -0,0 +1,280 @@
{
"Email Address": "Endereço de e-mail",
"API Key": "Chave de API",
"Email Address of the Token Owner": "Endereço de e-mail do proprietário do token",
"Your API Key in settings > integrations": "Sua chave API em configurações > integrações",
"Create Person": "Criar Pessoa",
"Update Person": "Atualizar pessoa",
"Create Lead": "Criar Potencial",
"Update Lead": "Atualizar Lead",
"Convert Lead": "Converter Lead",
"Create Company": "Criar Empresa",
"Update Company": "Atualizar Empresa",
"Create Opportunity": "Criar Oportunidade",
"Update Opportunity": "Atualizar Oportunidade",
"Create Project": "Criar Projeto",
"Update Project": "Atualizar Projeto",
"Create Task": "Criar tarefa",
"Create Activity": "Criar Atividade",
"Search for an Activity": "Pesquisar por uma atividade",
"Search for a Person": "Procurar por uma pessoa",
"Search for a Lead": "Procurar por um Potencial",
"Search for a Company": "Procurar por uma empresa",
"Search for an Opportunity": "Procure por uma Oportunidade",
"Search for a Project": "Pesquisar por um projeto",
"Custom API Call": "Chamada de API personalizada",
"Adds a new person/contact.": "Adiciona uma nova pessoa/contato.",
"Updates a person based on matching criteria.": "Atualiza uma pessoa com base em critérios correspondentes.",
"Adds a new lead.": "Adiciona um novo lead.",
"Updates an existing lead.": "Atualiza um lead existente.",
"Converts a lead into a person (optionally with company/opportunity).": "Converte um lead para uma pessoa (opcionalmente com empresa/oportunidade).",
"Adds a new company.": "Adiciona uma nova empresa.",
"Updates a company record.": "Atualiza um registro da empresa.",
"Adds a new opportunity.": "Adiciona uma nova oportunidade.",
"Updates an opportunity using match criteria.": "Atualiza uma oportunidade usando critérios de partida.",
"Adds a new project.": "Adiciona um novo projeto.",
"Updates a project record.": "Atualiza um registro de projeto.",
"Adds a new task under a person, lead, or opportunity.": "Adiciona uma nova tarefa sob pessoa, liderança ou oportunidade.",
"Logs an activity related to CRM entities.": "Logs uma atividade relacionada a entidades CRM.",
"Find an existing activity by type/criteria.": "Localizar uma atividade existente por tipo/critério.",
"Lookup a person using match criteria.": "Procure uma pessoa usando critérios de correspondência.",
"Lookup a lead using match criteria.": "Procurar uma liderança usando critérios de correspondência.",
"Lookup a company.": "Busque uma empresa.",
"Lookup an opportunity.": "Procure uma oportunidade.",
"Lookup a project.": "Procurar um projeto.",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"Full Name": "Nome Completo",
"Emails": "e-mails",
"Phone Numbers": "Números de telefone",
"Street": "Rua",
"City": "cidade",
"State/Region": "Estado/Região",
"Postal Code": "Código Postal",
"Country": "País/região",
"Person": "Pessoa",
"Email": "e-mail",
"Category of the email address (e.g., work, personal)": "Categoria do endereço de e-mail (por exemplo, trabalho, pessoal)",
"Lead": "Conduzir",
"Company": "Empresas",
"Opportunity": "Oportunidade",
"Email Domain": "Domínio de e-mail",
"Details": "detalhes",
"Primary Contact": "Contato principal",
"Name": "Nome",
"Pipeline": "Pipeline",
"Pipeline Stage": "Estágio do pipeline",
"Project": "Projecto",
"Task Name": "Nome da tarefa",
"Activity Type": "Tipo de Atividade",
"Assignee": "Assignee",
"Related Record Type": "Tipo de registro relacionado",
"Related Record": "Registro relacionado",
"Due Date/Time": "Prazo determinado",
"Reminder Date/Time": "Data/Hora do Lembrete",
"Priority": "Prioridade",
"Tags": "Etiquetas",
"Parent Entity": "Entidade Pai",
"Parent Entity Resource": "Recurso Pai da Entidade",
"Page Size": "Tamanho da página",
"Page Number": "Número da página",
"Minimum Activity Date": "Mínimo da data de atividade",
"Maximum Activity Date": "Data máxima de atividade",
"Full Result": "Resultado completo",
"Phone Number": "Número de telefone",
"Contact Type": "Tipo de contato",
"State": "Estado:",
"Socials": "Socials",
"Followed": "Seguido",
"Age": "Idade",
"Sort By": "Classificar por",
"Sort Direction": "Ordenar direção",
"Minimum Interaction Count": "Contagem mínima de interação",
"Maximum Interaction Count": "Número máximo de interações",
"Minimum Interaction Date": "Data Mínima de Interação",
"Maximum Interaction Date": "Data máxima de interação",
"Minimum Created Date": "Data Mínima Criada",
"Maximum Created Date": "Data Máxima de Criação",
"Lead Status": "Status do Prospecto",
"Customer Source": "Fonte do Cliente",
"Include Converted Leads": "Incluir Potenciais Convertidos",
"Minimum Monetary Value": "Valor monetário mínimo",
"Maximum Monetary Value": "Valor monetário máximo",
"Minimum Modified Date": "Data Mínima Modificada",
"Maximum Modified Date": "Data Máxima de Modificação",
"Status": "Estado",
"Primary Contacts": "Contatos primários",
"Loss Reason": "Motivo da perda",
"Minimum Stage Change Date": "Alteração mínima do estágio",
"Maximum Stage Change Date": "Data Máxima de Etapa de Alteração",
"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)",
"select a person": "selecione uma pessoa",
"select a Lead": "selecione um Potencial",
"select a Company": "selecione uma empresa",
"select an Opportunity": "selecione uma Oportunidade",
"E.g. democompany.com": "Ex.: democompany.com",
"select a primary contact": "selecione um contato principal",
"The name of the opportunity": "O nome da oportunidade",
"select a Pipeline": "selecione um Pipeline",
"Select a stage": "Selecione um estágio",
"The name of the project": "O nome do projeto",
"The details of the project": "Os detalhes do projeto",
"select a Project": "selecione um projeto",
"Details fo this task": "Detalhes desta tarefa",
"Select activity Type": "Seleciona Tipo Atividade",
"select a user to assign to": "selecione um usuário para atribuir a",
"Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).": "Escolha o tipo de registro de Cobre esta tarefa deve ser vinculada a (ex.: Pessoa, Empresa, Liderança, Oportunidade ou Projeto).",
"Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.": "Selecione o registro específico (do tipo escolhido acima) ao qual esta tarefa deve ser anexada. Por exemplo, escolha a pessoa ou a oportunidade à qual a tarefa se relaciona.",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).": "Digite a data e a hora em formato de 24 horas, por exemplo, `2025-09-09 11:40` (11:40 AM) ou `2025-09-09 13:00` (1:00 PM).",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)": "Digite a data e a hora em formato de 24 horas, por exemplo, `2025-09-09 11:40` (11:40 AM) ou `2025-09-09 13:00` (1:00 PM)",
"Select parent entity": "Selecione a entidade pai",
"Select Resource": "Selecionar Recurso",
"Default 50. Max 200.": "Padrão 50. Máximo 200.",
"24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.": "Formato de 24 horas, ex: 2025-09-10 11:40. O timestamp da primeira data de atividade.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da data mais recente da atividade.",
"(Optional) If set, search performance improves but duplicate activity logs may be returned": "(Opcional) Se atribuído, o desempenho da pesquisa melhora mas logs de atividade duplicados podem ser retornados",
"Full name of the People to search for.": "Nome completo das pessoas para procurar.",
"Phone Number of the People to search for.": "Número de telefone das pessoas a procurar",
"Emails of the People to search for.": "E-mails das pessoas para procurar.",
"Select contact Type": "Selecionar tipo de contato",
"select assignees": "selecione os responsáveis",
"select Companies": "selecionar empresas",
"select Opportunities": "selecione Oportunidades",
"The city in which People must be located.": "A cidade na qual as pessoas devem estar localizadas.",
"The state or province in which People must be located.": "O estado ou província em que as pessoas devem se localizar.",
"The postal code in which People must be located.": "O código postal no qual as pessoas devem estar localizadas.",
"The two character country code where People must be located.": "O código do país de dois caracteres onde as pessoas devem estar localizadas.",
"Filter People to those that match at least one of the tags specified.": "Filtra as pessoas para aquelas que correspondem a pelo menos uma das tags especificadas.",
"Filter People to those that match at least one of the social accounts specified.": "Filtrar pessoas para aquelas que correspondam a pelo menos uma das contas sociais especificadas.",
"Filter by followed state": "Filtrar por estado seguido",
"The maximum age in seconds that People must be.": "A idade máxima em segundos que as pessoas devem ser.",
"The field on which to sort the results": "O campo no qual os resultados serão classificados",
"The direction in which to sort the result": "A direção na qual será classificado o resultado",
"The minimum number of interactions People must have had.": "O número mínimo de interações que as pessoas devem ter tido.",
"The maximum number of interactions People must have had.": "O número máximo de interações que as pessoas devem ter tido.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da data mais antiga da última interação.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da última data da última interação.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.": "Formato de 24 horas, por exemplo, 2025-09-10 13:00. O timestamp da primeira data em que as pessoas são criadas.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.": "Formato de 24 horas, por exemplo, 2025-09-10 13:00. O horário da última data que as pessoas são criadas.",
"Full name of the Lead to search for.": "Nome completo do Lead a procurar.",
"Phone Number of the Lead to search for.": "Número de telefone do Lead para procurar.",
"Emails of the Lead to search for.\t": "E-mails do Lead para pesquisar.\t",
"Select lead status": "Selecionar estado do prospecto",
"Select customer source.": "Selecionar fonte do cliente.",
"The city in which Lead must be located.": "A cidade em que o chumbo deve ser localizado.",
"The state or province in which Lead must be located.": "O estado ou província em que o chumbo deve ser localizado.",
"The postal code in which Lead must be located.": "O código postal no qual o Lead deve ser localizado.",
"The two character country code where Lead must be located.": "O código do país de dois caracteres em que o Líder deve estar localizado.",
"Filter Lead to those that match at least one of the tags specified.": "Filtrar Lead para aqueles que correspondam a pelo menos uma das tags especificadas.",
"Filter Lead to those that match at least one of the social accounts specified.": "Filtrar Lead para aqueles que correspondam a pelo menos uma das contas sociais especificadas.",
"The maximum age in seconds that Lead must be.": "A idade máxima em segundos que o chumbo deve ser.",
"Specify if response should contain converted leads.": "Especifica se a resposta deve conter leads convertidos.",
"The minimum monetary value Leads must have.": "O valor monetário mínimo Leads deve ter.",
"The maximum monetary value Leads must have.": "O valor monetário máximo Leads deve ter.",
"The minimum number of interactions Lead must have had.": "O número mínimo de interações do Lead deve ter passado.",
"The maximum number of interactions Lead must have had.": "O número máximo de interações do Lead deve ter passado.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da data mais antiga é criado.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da última data Lead é criado.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.": "Formato de 24 horas, ex.: 2025-09-10 13:00. O timestamp da data mais antiga é modificado.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da data mais recente é modificado.",
"Full name of the Company to search for.": "Nome completo da Empresa para procurar.",
"Phone Number of the Company to search for.": "Número de telefone da Empresa para pesquisar.",
"Email Domain of the Company to search for.": "Domínio de e-mail da empresa para procurar.",
"The city in which Company must be located.": "A cidade em que a empresa deve ser localizada.",
"The state or province in which Company must be located.": "O estado ou província em que a empresa deve ser localizada.",
"The postal code in which Company must be located.": "O código postal em que a empresa deve estar localizada.",
"The two character country code where Company must be located.": "O código do país de dois caracteres onde a empresa deve estar localizada.",
"Filter Company to those that match at least one of the tags specified.": "Filtrar Empresa com aqueles que correspondam a pelo menos uma das tags especificadas.",
"Filter Company to those that match at least one of the social accounts specified.": "Filtrar Empresa com aqueles que correspondam a pelo menos uma das contas sociais especificadas.",
"The maximum age in seconds that Company must be.": "A idade máxima em segundos que a empresa deve ser.",
"The minimum number of interactions Company must have had.": "O número mínimo de interações da Empresa deve ter passado.",
"The maximum number of interactions Company must have had.": "O número máximo de interações da Empresa deve ter passado.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.": "Formato de 24 horas, por exemplo, 2025-09-10 13:00. O timestamp da primeira data em que a empresa foi criada.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.": "Formato de 24 horas, por exemplo, 2025-09-10 13:00. O timestamp da data mais recente da Empresa é criado.",
"Full name of the Opportunity to search for.": "Nome completo da Oportunidade de busca.",
"Filter by Opportunity status": "Filtrar por Status de Oportunidade",
"select primary contacts": "selecionar contatos primários",
"Select loss reason.": "Selecione o motivo da perda.",
"The minimum monetary value Opportunities must have.": "As oportunidades de valor monetário mínimo devem ter.",
"The maximum monetary value Opportunities must have.": "As oportunidades de valor monetário máximo devem ter.",
"The minimum number of interactions Opportunity must have had.": "O número mínimo de oportunidades de interações deve ter sido.",
"The maximum number of interactions Opportunity must have had.": "O número máximo de oportunidades de interações deve ter passado.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da data mais anterior de fechamento.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da data de encerramento mais recente.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.": "Formato de 24 horas, ex: 2025-09-10 13:00. O horário da primeira data de uma mudança de etapa.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.": "Formato de 24 horas, ex: 2025-09-10 13:00. O horário da última data de uma mudança de etapa.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da data mais antiga são criadas.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da última data é criado.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da data mais antiga são Modificados.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.": "Formato de 24 horas, ex: 2025-09-10 13:00. O timestamp da data mais recente é Modificado.",
"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..",
"None": "Nenhuma",
"Low": "baixa",
"Medium": "Média",
"High": "alta",
"Task": "Tarefas",
"followed": "seguido",
"not followed": "não seguido",
"Title": "Título",
"Phone": "Smartphone",
"Date Modified": "Data de Modificação",
"Date Created": "Data de Criação",
"Zip": "CEP",
"Ascending": "Crescente",
"Descending": "Decrescente",
"Company Name": "Nome da Empresa",
"Value": "Valor",
"Inactive Days": "Dias Inativos",
"Contact": "contato",
"Contact First Name": "Primeiro Nome do Contato",
"Contact Last Name": "Último Nome do Contato",
"Contact Group": "Grupo de contato",
"Last Interaction": "Última Interação",
"Interaction Count": "Contagem de interação",
"Primary Website": "Site primário",
"Open": "Abertas",
"Won": "Ganhou",
"Lost": "Perdido",
"Abandoned": "Abandonado",
"Customer Source ID": "ID da Fonte do Cliente",
"Monetary Unit": "Unidade Monetária",
"Monetary Value": "Valor monetário",
"Stage": "Etapa",
"Completed": "Concluído",
"Assigned To": "Atribuído Para",
"Related To": "Relacionado a",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA",
"New Activity": "Nova atividade",
"New Person": "Nova Pessoa",
"New Lead": "Novo Potencial",
"New Task": "Nova tarefa",
"Updated Lead": "Lead atualizado",
"Updated Task": "Tarefa atualizada",
"Updated Opportunity": "Oportunidade Atualizada",
"Updated Opportunity Stage": "Atualizado Opportunity Stage",
"Updated Opportunity Status": "Estado da Oportunidade Atualizada",
"Updated Project": "Projeto atualizado",
"Updated Lead Status": "Status atualizado do Potencial",
"Triggers when a new activity is logged": "Dispara quando uma nova atividade é registrada",
"Triggers when a new person/contact is created.": "Dispara quando uma nova pessoa/contato é criada.",
"Triggers when a new lead is created.": "Dispara quando um novo lead é criado.",
"Triggers when a new task is created.": "Dispara quando uma nova tarefa é criada.",
"Triggers when a lead is modified.": "Dispara quando uma vantagem é modificada.",
"Triggers when a task is updated.": "Dispara quando uma tarefa é atualizada.",
"Triggers when an opportunity changes.": "Dispara quando uma oportunidade for alterada.",
"Triggers when an opportunity stage changes": "Dispara quando um estágio de oportunidade muda",
"Triggers when an opportunity's status changes.": "Dispara quando o status de uma oportunidade muda.",
"Triggers when a project is updated.": "Dispara quando um projeto é atualizado.",
"Triggers when the status of a lead changes.": "Dispara quando o status de um lead muda."
}

View File

@@ -0,0 +1,280 @@
{
"Email Address": "Email Address",
"API Key": "API Key",
"Email Address of the Token Owner": "Email Address of the Token Owner",
"Your API Key in settings > integrations": "Your API Key in settings > integrations",
"Create Person": "Create Person",
"Update Person": "Update Person",
"Create Lead": "Create Lead",
"Update Lead": "Update Lead",
"Convert Lead": "Convert Lead",
"Create Company": "Create Company",
"Update Company": "Update Company",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Create Project": "Create Project",
"Update Project": "Update Project",
"Create Task": "Create Task",
"Create Activity": "Create Activity",
"Search for an Activity": "Search for an Activity",
"Search for a Person": "Search for a Person",
"Search for a Lead": "Search for a Lead",
"Search for a Company": "Search for a Company",
"Search for an Opportunity": "Search for an Opportunity",
"Search for a Project": "Search for a Project",
"Custom API Call": "Custom API Call",
"Adds a new person/contact.": "Adds a new person/contact.",
"Updates a person based on matching criteria.": "Updates a person based on matching criteria.",
"Adds a new lead.": "Adds a new lead.",
"Updates an existing lead.": "Updates an existing lead.",
"Converts a lead into a person (optionally with company/opportunity).": "Converts a lead into a person (optionally with company/opportunity).",
"Adds a new company.": "Adds a new company.",
"Updates a company record.": "Updates a company record.",
"Adds a new opportunity.": "Adds a new opportunity.",
"Updates an opportunity using match criteria.": "Updates an opportunity using match criteria.",
"Adds a new project.": "Adds a new project.",
"Updates a project record.": "Updates a project record.",
"Adds a new task under a person, lead, or opportunity.": "Adds a new task under a person, lead, or opportunity.",
"Logs an activity related to CRM entities.": "Logs an activity related to CRM entities.",
"Find an existing activity by type/criteria.": "Find an existing activity by type/criteria.",
"Lookup a person using match criteria.": "Lookup a person using match criteria.",
"Lookup a lead using match criteria.": "Lookup a lead using match criteria.",
"Lookup a company.": "Lookup a company.",
"Lookup an opportunity.": "Lookup an opportunity.",
"Lookup a project.": "Lookup a project.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Full Name": "Full Name",
"Emails": "Emails",
"Phone Numbers": "Phone Numbers",
"Street": "Street",
"City": "City",
"State/Region": "State/Region",
"Postal Code": "Postal Code",
"Country": "Country",
"Person": "Person",
"Email": "Email",
"Category of the email address (e.g., work, personal)": "Category of the email address (e.g., work, personal)",
"Lead": "Lead",
"Company": "Company",
"Opportunity": "Opportunity",
"Email Domain": "Email Domain",
"Details": "Details",
"Primary Contact": "Primary Contact",
"Name": "Name",
"Pipeline": "Pipeline",
"Pipeline Stage": "Pipeline Stage",
"Project": "Project",
"Task Name": "Task Name",
"Activity Type": "Activity Type",
"Assignee": "Assignee",
"Related Record Type": "Related Record Type",
"Related Record": "Related Record",
"Due Date/Time": "Due Date/Time",
"Reminder Date/Time": "Reminder Date/Time",
"Priority": "Priority",
"Tags": "Tags",
"Parent Entity": "Parent Entity",
"Parent Entity Resource": "Parent Entity Resource",
"Page Size": "Page Size",
"Page Number": "Page Number",
"Minimum Activity Date": "Minimum Activity Date",
"Maximum Activity Date": "Maximum Activity Date",
"Full Result": "Full Result",
"Phone Number": "Phone Number",
"Contact Type": "Contact Type",
"State": "State",
"Socials": "Socials",
"Followed": "Followed",
"Age": "Age",
"Sort By": "Sort By",
"Sort Direction": "Sort Direction",
"Minimum Interaction Count": "Minimum Interaction Count",
"Maximum Interaction Count": "Maximum Interaction Count",
"Minimum Interaction Date": "Minimum Interaction Date",
"Maximum Interaction Date": "Maximum Interaction Date",
"Minimum Created Date": "Minimum Created Date",
"Maximum Created Date": "Maximum Created Date",
"Lead Status": "Lead Status",
"Customer Source": "Customer Source",
"Include Converted Leads": "Include Converted Leads",
"Minimum Monetary Value": "Minimum Monetary Value",
"Maximum Monetary Value": "Maximum Monetary Value",
"Minimum Modified Date": "Minimum Modified Date",
"Maximum Modified Date": "Maximum Modified Date",
"Status": "Status",
"Primary Contacts": "Primary Contacts",
"Loss Reason": "Loss Reason",
"Minimum Stage Change Date": "Minimum Stage Change Date",
"Maximum Stage Change Date": "Maximum Stage Change Date",
"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)",
"select a person": "select a person",
"select a Lead": "select a Lead",
"select a Company": "select a Company",
"select an Opportunity": "select an Opportunity",
"E.g. democompany.com": "E.g. democompany.com",
"select a primary contact": "select a primary contact",
"The name of the opportunity": "The name of the opportunity",
"select a Pipeline": "select a Pipeline",
"Select a stage": "Select a stage",
"The name of the project": "The name of the project",
"The details of the project": "The details of the project",
"select a Project": "select a Project",
"Details fo this task": "Details fo this task",
"Select activity Type": "Select activity Type",
"select a user to assign to": "select a user to assign to",
"Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).": "Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).",
"Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.": "Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).": "Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)": "Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)",
"Select parent entity": "Select parent entity",
"Select Resource": "Select Resource",
"Default 50. Max 200.": "Default 50. Max 200.",
"24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.": "24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.",
"(Optional) If set, search performance improves but duplicate activity logs may be returned": "(Optional) If set, search performance improves but duplicate activity logs may be returned",
"Full name of the People to search for.": "Full name of the People to search for.",
"Phone Number of the People to search for.": "Phone Number of the People to search for.",
"Emails of the People to search for.": "Emails of the People to search for.",
"Select contact Type": "Select contact Type",
"select assignees": "select assignees",
"select Companies": "select Companies",
"select Opportunities": "select Opportunities",
"The city in which People must be located.": "The city in which People must be located.",
"The state or province in which People must be located.": "The state or province in which People must be located.",
"The postal code in which People must be located.": "The postal code in which People must be located.",
"The two character country code where People must be located.": "The two character country code where People must be located.",
"Filter People to those that match at least one of the tags specified.": "Filter People to those that match at least one of the tags specified.",
"Filter People to those that match at least one of the social accounts specified.": "Filter People to those that match at least one of the social accounts specified.",
"Filter by followed state": "Filter by followed state",
"The maximum age in seconds that People must be.": "The maximum age in seconds that People must be.",
"The field on which to sort the results": "The field on which to sort the results",
"The direction in which to sort the result": "The direction in which to sort the result",
"The minimum number of interactions People must have had.": "The minimum number of interactions People must have had.",
"The maximum number of interactions People must have had.": "The maximum number of interactions People must have had.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.",
"Full name of the Lead to search for.": "Full name of the Lead to search for.",
"Phone Number of the Lead to search for.": "Phone Number of the Lead to search for.",
"Emails of the Lead to search for.\t": "Emails of the Lead to search for.\t",
"Select lead status": "Select lead status",
"Select customer source.": "Select customer source.",
"The city in which Lead must be located.": "The city in which Lead must be located.",
"The state or province in which Lead must be located.": "The state or province in which Lead must be located.",
"The postal code in which Lead must be located.": "The postal code in which Lead must be located.",
"The two character country code where Lead must be located.": "The two character country code where Lead must be located.",
"Filter Lead to those that match at least one of the tags specified.": "Filter Lead to those that match at least one of the tags specified.",
"Filter Lead to those that match at least one of the social accounts specified.": "Filter Lead to those that match at least one of the social accounts specified.",
"The maximum age in seconds that Lead must be.": "The maximum age in seconds that Lead must be.",
"Specify if response should contain converted leads.": "Specify if response should contain converted leads.",
"The minimum monetary value Leads must have.": "The minimum monetary value Leads must have.",
"The maximum monetary value Leads must have.": "The maximum monetary value Leads must have.",
"The minimum number of interactions Lead must have had.": "The minimum number of interactions Lead must have had.",
"The maximum number of interactions Lead must have had.": "The maximum number of interactions Lead must have had.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.",
"Full name of the Company to search for.": "Full name of the Company to search for.",
"Phone Number of the Company to search for.": "Phone Number of the Company to search for.",
"Email Domain of the Company to search for.": "Email Domain of the Company to search for.",
"The city in which Company must be located.": "The city in which Company must be located.",
"The state or province in which Company must be located.": "The state or province in which Company must be located.",
"The postal code in which Company must be located.": "The postal code in which Company must be located.",
"The two character country code where Company must be located.": "The two character country code where Company must be located.",
"Filter Company to those that match at least one of the tags specified.": "Filter Company to those that match at least one of the tags specified.",
"Filter Company to those that match at least one of the social accounts specified.": "Filter Company to those that match at least one of the social accounts specified.",
"The maximum age in seconds that Company must be.": "The maximum age in seconds that Company must be.",
"The minimum number of interactions Company must have had.": "The minimum number of interactions Company must have had.",
"The maximum number of interactions Company must have had.": "The maximum number of interactions Company must have had.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.",
"Full name of the Opportunity to search for.": "Full name of the Opportunity to search for.",
"Filter by Opportunity status": "Filter by Opportunity status",
"select primary contacts": "select primary contacts",
"Select loss reason.": "Select loss reason.",
"The minimum monetary value Opportunities must have.": "The minimum monetary value Opportunities must have.",
"The maximum monetary value Opportunities must have.": "The maximum monetary value Opportunities must have.",
"The minimum number of interactions Opportunity must have had.": "The minimum number of interactions Opportunity must have had.",
"The maximum number of interactions Opportunity must have had.": "The maximum number of interactions Opportunity must have had.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.",
"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..",
"None": "None",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"Task": "Task",
"followed": "followed",
"not followed": "not followed",
"Title": "Title",
"Phone": "Phone",
"Date Modified": "Date Modified",
"Date Created": "Date Created",
"Zip": "Zip",
"Ascending": "Ascending",
"Descending": "Descending",
"Company Name": "Company Name",
"Value": "Value",
"Inactive Days": "Inactive Days",
"Contact": "Contact",
"Contact First Name": "Contact First Name",
"Contact Last Name": "Contact Last Name",
"Contact Group": "Contact Group",
"Last Interaction": "Last Interaction",
"Interaction Count": "Interaction Count",
"Primary Website": "Primary Website",
"Open": "Open",
"Won": "Won",
"Lost": "Lost",
"Abandoned": "Abandoned",
"Customer Source ID": "Customer Source ID",
"Monetary Unit": "Monetary Unit",
"Monetary Value": "Monetary Value",
"Stage": "Stage",
"Completed": "Completed",
"Assigned To": "Assigned To",
"Related To": "Related To",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Activity": "New Activity",
"New Person": "New Person",
"New Lead": "New Lead",
"New Task": "New Task",
"Updated Lead": "Updated Lead",
"Updated Task": "Updated Task",
"Updated Opportunity": "Updated Opportunity",
"Updated Opportunity Stage": "Updated Opportunity Stage",
"Updated Opportunity Status": "Updated Opportunity Status",
"Updated Project": "Updated Project",
"Updated Lead Status": "Updated Lead Status",
"Triggers when a new activity is logged": "Triggers when a new activity is logged",
"Triggers when a new person/contact is created.": "Triggers when a new person/contact is created.",
"Triggers when a new lead is created.": "Triggers when a new lead is created.",
"Triggers when a new task is created.": "Triggers when a new task is created.",
"Triggers when a lead is modified.": "Triggers when a lead is modified.",
"Triggers when a task is updated.": "Triggers when a task is updated.",
"Triggers when an opportunity changes.": "Triggers when an opportunity changes.",
"Triggers when an opportunity stage changes": "Triggers when an opportunity stage changes",
"Triggers when an opportunity's status changes.": "Triggers when an opportunity's status changes.",
"Triggers when a project is updated.": "Triggers when a project is updated.",
"Triggers when the status of a lead changes.": "Triggers when the status of a lead changes."
}

View File

@@ -0,0 +1,280 @@
{
"Email Address": "Email Address",
"API Key": "API 密钥",
"Email Address of the Token Owner": "Email Address of the Token Owner",
"Your API Key in settings > integrations": "Your API Key in settings > integrations",
"Create Person": "Create Person",
"Update Person": "Update Person",
"Create Lead": "Create Lead",
"Update Lead": "Update Lead",
"Convert Lead": "Convert Lead",
"Create Company": "Create Company",
"Update Company": "Update Company",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Create Project": "Create Project",
"Update Project": "Update Project",
"Create Task": "Create Task",
"Create Activity": "Create Activity",
"Search for an Activity": "Search for an Activity",
"Search for a Person": "Search for a Person",
"Search for a Lead": "Search for a Lead",
"Search for a Company": "Search for a Company",
"Search for an Opportunity": "Search for an Opportunity",
"Search for a Project": "Search for a Project",
"Custom API Call": "自定义 API 呼叫",
"Adds a new person/contact.": "Adds a new person/contact.",
"Updates a person based on matching criteria.": "Updates a person based on matching criteria.",
"Adds a new lead.": "Adds a new lead.",
"Updates an existing lead.": "Updates an existing lead.",
"Converts a lead into a person (optionally with company/opportunity).": "Converts a lead into a person (optionally with company/opportunity).",
"Adds a new company.": "Adds a new company.",
"Updates a company record.": "Updates a company record.",
"Adds a new opportunity.": "Adds a new opportunity.",
"Updates an opportunity using match criteria.": "Updates an opportunity using match criteria.",
"Adds a new project.": "Adds a new project.",
"Updates a project record.": "Updates a project record.",
"Adds a new task under a person, lead, or opportunity.": "Adds a new task under a person, lead, or opportunity.",
"Logs an activity related to CRM entities.": "Logs an activity related to CRM entities.",
"Find an existing activity by type/criteria.": "Find an existing activity by type/criteria.",
"Lookup a person using match criteria.": "Lookup a person using match criteria.",
"Lookup a lead using match criteria.": "Lookup a lead using match criteria.",
"Lookup a company.": "Lookup a company.",
"Lookup an opportunity.": "Lookup an opportunity.",
"Lookup a project.": "Lookup a project.",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"Full Name": "Full Name",
"Emails": "电子邮件",
"Phone Numbers": "Phone Numbers",
"Street": "Street",
"City": "City",
"State/Region": "State/Region",
"Postal Code": "Postal Code",
"Country": "Country",
"Person": "Person",
"Email": "电子邮件地址",
"Category of the email address (e.g., work, personal)": "Category of the email address (e.g., work, personal)",
"Lead": "Lead",
"Company": "Company",
"Opportunity": "Opportunity",
"Email Domain": "Email Domain",
"Details": "详细信息",
"Primary Contact": "Primary Contact",
"Name": "名称",
"Pipeline": "Pipeline",
"Pipeline Stage": "Pipeline Stage",
"Project": "项目",
"Task Name": "Task Name",
"Activity Type": "Activity Type",
"Assignee": "Assignee",
"Related Record Type": "Related Record Type",
"Related Record": "Related Record",
"Due Date/Time": "Due Date/Time",
"Reminder Date/Time": "Reminder Date/Time",
"Priority": "Priority",
"Tags": "标签",
"Parent Entity": "Parent Entity",
"Parent Entity Resource": "Parent Entity Resource",
"Page Size": "Page Size",
"Page Number": "Page Number",
"Minimum Activity Date": "Minimum Activity Date",
"Maximum Activity Date": "Maximum Activity Date",
"Full Result": "Full Result",
"Phone Number": "Phone Number",
"Contact Type": "Contact Type",
"State": "State",
"Socials": "Socials",
"Followed": "Followed",
"Age": "Age",
"Sort By": "Sort By",
"Sort Direction": "Sort Direction",
"Minimum Interaction Count": "Minimum Interaction Count",
"Maximum Interaction Count": "Maximum Interaction Count",
"Minimum Interaction Date": "Minimum Interaction Date",
"Maximum Interaction Date": "Maximum Interaction Date",
"Minimum Created Date": "Minimum Created Date",
"Maximum Created Date": "Maximum Created Date",
"Lead Status": "Lead Status",
"Customer Source": "Customer Source",
"Include Converted Leads": "Include Converted Leads",
"Minimum Monetary Value": "Minimum Monetary Value",
"Maximum Monetary Value": "Maximum Monetary Value",
"Minimum Modified Date": "Minimum Modified Date",
"Maximum Modified Date": "Maximum Modified Date",
"Status": "状态",
"Primary Contacts": "Primary Contacts",
"Loss Reason": "Loss Reason",
"Minimum Stage Change Date": "Minimum Stage Change Date",
"Maximum Stage Change Date": "Maximum Stage Change Date",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"select a person": "select a person",
"select a Lead": "select a Lead",
"select a Company": "select a Company",
"select an Opportunity": "select an Opportunity",
"E.g. democompany.com": "E.g. democompany.com",
"select a primary contact": "select a primary contact",
"The name of the opportunity": "The name of the opportunity",
"select a Pipeline": "select a Pipeline",
"Select a stage": "Select a stage",
"The name of the project": "The name of the project",
"The details of the project": "The details of the project",
"select a Project": "select a Project",
"Details fo this task": "Details fo this task",
"Select activity Type": "Select activity Type",
"select a user to assign to": "select a user to assign to",
"Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).": "Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).",
"Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.": "Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).": "Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).",
"Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)": "Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)",
"Select parent entity": "Select parent entity",
"Select Resource": "Select Resource",
"Default 50. Max 200.": "Default 50. Max 200.",
"24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.": "24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.",
"(Optional) If set, search performance improves but duplicate activity logs may be returned": "(Optional) If set, search performance improves but duplicate activity logs may be returned",
"Full name of the People to search for.": "Full name of the People to search for.",
"Phone Number of the People to search for.": "Phone Number of the People to search for.",
"Emails of the People to search for.": "Emails of the People to search for.",
"Select contact Type": "Select contact Type",
"select assignees": "select assignees",
"select Companies": "select Companies",
"select Opportunities": "select Opportunities",
"The city in which People must be located.": "The city in which People must be located.",
"The state or province in which People must be located.": "The state or province in which People must be located.",
"The postal code in which People must be located.": "The postal code in which People must be located.",
"The two character country code where People must be located.": "The two character country code where People must be located.",
"Filter People to those that match at least one of the tags specified.": "Filter People to those that match at least one of the tags specified.",
"Filter People to those that match at least one of the social accounts specified.": "Filter People to those that match at least one of the social accounts specified.",
"Filter by followed state": "Filter by followed state",
"The maximum age in seconds that People must be.": "The maximum age in seconds that People must be.",
"The field on which to sort the results": "The field on which to sort the results",
"The direction in which to sort the result": "The direction in which to sort the result",
"The minimum number of interactions People must have had.": "The minimum number of interactions People must have had.",
"The maximum number of interactions People must have had.": "The maximum number of interactions People must have had.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.",
"Full name of the Lead to search for.": "Full name of the Lead to search for.",
"Phone Number of the Lead to search for.": "Phone Number of the Lead to search for.",
"Emails of the Lead to search for.\t": "Emails of the Lead to search for.\t",
"Select lead status": "Select lead status",
"Select customer source.": "Select customer source.",
"The city in which Lead must be located.": "The city in which Lead must be located.",
"The state or province in which Lead must be located.": "The state or province in which Lead must be located.",
"The postal code in which Lead must be located.": "The postal code in which Lead must be located.",
"The two character country code where Lead must be located.": "The two character country code where Lead must be located.",
"Filter Lead to those that match at least one of the tags specified.": "Filter Lead to those that match at least one of the tags specified.",
"Filter Lead to those that match at least one of the social accounts specified.": "Filter Lead to those that match at least one of the social accounts specified.",
"The maximum age in seconds that Lead must be.": "The maximum age in seconds that Lead must be.",
"Specify if response should contain converted leads.": "Specify if response should contain converted leads.",
"The minimum monetary value Leads must have.": "The minimum monetary value Leads must have.",
"The maximum monetary value Leads must have.": "The maximum monetary value Leads must have.",
"The minimum number of interactions Lead must have had.": "The minimum number of interactions Lead must have had.",
"The maximum number of interactions Lead must have had.": "The maximum number of interactions Lead must have had.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.",
"Full name of the Company to search for.": "Full name of the Company to search for.",
"Phone Number of the Company to search for.": "Phone Number of the Company to search for.",
"Email Domain of the Company to search for.": "Email Domain of the Company to search for.",
"The city in which Company must be located.": "The city in which Company must be located.",
"The state or province in which Company must be located.": "The state or province in which Company must be located.",
"The postal code in which Company must be located.": "The postal code in which Company must be located.",
"The two character country code where Company must be located.": "The two character country code where Company must be located.",
"Filter Company to those that match at least one of the tags specified.": "Filter Company to those that match at least one of the tags specified.",
"Filter Company to those that match at least one of the social accounts specified.": "Filter Company to those that match at least one of the social accounts specified.",
"The maximum age in seconds that Company must be.": "The maximum age in seconds that Company must be.",
"The minimum number of interactions Company must have had.": "The minimum number of interactions Company must have had.",
"The maximum number of interactions Company must have had.": "The maximum number of interactions Company must have had.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.",
"Full name of the Opportunity to search for.": "Full name of the Opportunity to search for.",
"Filter by Opportunity status": "Filter by Opportunity status",
"select primary contacts": "select primary contacts",
"Select loss reason.": "Select loss reason.",
"The minimum monetary value Opportunities must have.": "The minimum monetary value Opportunities must have.",
"The maximum monetary value Opportunities must have.": "The maximum monetary value Opportunities must have.",
"The minimum number of interactions Opportunity must have had.": "The minimum number of interactions Opportunity must have had.",
"The maximum number of interactions Opportunity must have had.": "The maximum number of interactions Opportunity must have had.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.",
"24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.": "24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"None": "无",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"Task": "Task",
"followed": "followed",
"not followed": "not followed",
"Title": "标题",
"Phone": "Phone",
"Date Modified": "Date Modified",
"Date Created": "创建日期",
"Zip": "Zip",
"Ascending": "升序",
"Descending": "降序",
"Company Name": "Company Name",
"Value": "值",
"Inactive Days": "Inactive Days",
"Contact": "Contact",
"Contact First Name": "Contact First Name",
"Contact Last Name": "Contact Last Name",
"Contact Group": "Contact Group",
"Last Interaction": "Last Interaction",
"Interaction Count": "Interaction Count",
"Primary Website": "Primary Website",
"Open": "Open",
"Won": "Won",
"Lost": "Lost",
"Abandoned": "Abandoned",
"Customer Source ID": "Customer Source ID",
"Monetary Unit": "Monetary Unit",
"Monetary Value": "Monetary Value",
"Stage": "Stage",
"Completed": "Completed",
"Assigned To": "Assigned To",
"Related To": "Related To",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色",
"New Activity": "New Activity",
"New Person": "New Person",
"New Lead": "New Lead",
"New Task": "New Task",
"Updated Lead": "Updated Lead",
"Updated Task": "Updated Task",
"Updated Opportunity": "Updated Opportunity",
"Updated Opportunity Stage": "Updated Opportunity Stage",
"Updated Opportunity Status": "Updated Opportunity Status",
"Updated Project": "Updated Project",
"Updated Lead Status": "Updated Lead Status",
"Triggers when a new activity is logged": "Triggers when a new activity is logged",
"Triggers when a new person/contact is created.": "Triggers when a new person/contact is created.",
"Triggers when a new lead is created.": "Triggers when a new lead is created.",
"Triggers when a new task is created.": "Triggers when a new task is created.",
"Triggers when a lead is modified.": "Triggers when a lead is modified.",
"Triggers when a task is updated.": "Triggers when a task is updated.",
"Triggers when an opportunity changes.": "Triggers when an opportunity changes.",
"Triggers when an opportunity stage changes": "Triggers when an opportunity stage changes",
"Triggers when an opportunity's status changes.": "Triggers when an opportunity's status changes.",
"Triggers when a project is updated.": "Triggers when a project is updated.",
"Triggers when the status of a lead changes.": "Triggers when the status of a lead changes."
}

View File

@@ -0,0 +1,95 @@
import {
createPiece,
PieceAuth,
PiecePropValueSchema,
} from '@activepieces/pieces-framework';
import { BASE_URL, CopperAuth } from './lib/common/constants';
import { newPerson } from './lib/triggers/new-person';
import { newLead } from './lib/triggers/new-lead';
import { newTask } from './lib/triggers/new-task';
import { updatedLead } from './lib/triggers/updated-lead';
import { updatedTask } from './lib/triggers/updated-task';
import { updatedOpportunity } from './lib/triggers/updated-opportunity';
import { updatedOpportunityStage } from './lib/triggers/updated-opportunity-stage';
import { updatedOpportunityStatus } from './lib/triggers/updated-opportunity-status';
import { updatedProject } from './lib/triggers/updated-project';
import { updatedLeadStatus } from './lib/triggers/updated-lead-status';
import { createPerson } from './lib/actions/create-person';
import { updatePerson } from './lib/actions/update-person';
import { createLead } from './lib/actions/create-lead';
import { updateLead } from './lib/actions/update-lead';
import { convertLead } from './lib/actions/convert-lead';
import { createCompany } from './lib/actions/create-company';
import { updateCompany } from './lib/actions/update-company';
import { createOpportunity } from './lib/actions/create-opportunity';
import { updateOpportunity } from './lib/actions/update-opportunity';
import { createProject } from './lib/actions/create-project';
import { updateProject } from './lib/actions/update-project';
import { createTask } from './lib/actions/create-task';
import { createActivity } from './lib/actions/create-activity';
import { searchForAnActivity } from './lib/actions/search-for-an-activity';
import { searchForAPerson } from './lib/actions/search-for-a-person';
import { searchForALead } from './lib/actions/search-for-a-lead';
import { searchForACompany } from './lib/actions/search-for-a-company';
import { searchForAnOpportunity } from './lib/actions/search-for-an-opportunity';
import { searchForAProject } from './lib/actions/search-for-a-project';
import { newActivity } from './lib/triggers/new-activity';
import { PieceCategory } from '@activepieces/shared';
import { createCustomApiCallAction } from '@activepieces/pieces-common';
export const copper = createPiece({
displayName: 'Copper',
auth: CopperAuth,
minimumSupportedRelease: '0.36.1',
logoUrl: 'https://cdn.activepieces.com/pieces/copper.png',
authors: ['gs03-dev'],
categories: [PieceCategory.SALES_AND_CRM, PieceCategory.PRODUCTIVITY],
actions: [
createPerson,
updatePerson,
createLead,
updateLead,
convertLead,
createCompany,
updateCompany,
createOpportunity,
updateOpportunity,
createProject,
updateProject,
createTask,
createActivity,
searchForAnActivity,
searchForAPerson,
searchForALead,
searchForACompany,
searchForAnOpportunity,
searchForAProject,
createCustomApiCallAction({
auth: CopperAuth,
baseUrl: () => BASE_URL,
authMapping: async (auth) => {
return {
Accept: 'application/json',
'Content-Type': 'application/json',
'X-PW-AccessToken': auth.props.apiKey,
'X-PW-Application': 'developer_api',
'X-PW-UserEmail': auth.props.email,
};
},
}),
],
triggers: [
newActivity,
newPerson,
newLead,
newTask,
updatedLead,
updatedTask,
updatedOpportunity,
updatedOpportunityStage,
updatedOpportunityStatus,
updatedProject,
updatedLeadStatus,
],
});

View File

@@ -0,0 +1,60 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import {
companyDropdown,
leadDropdown,
opportunityDropdown,
} from '../common/props';
import { CopperApiService } from '../common/requests';
export const convertLead = createAction({
auth: CopperAuth,
name: 'convertLead',
displayName: 'Convert Lead',
description:
'Converts a lead into a person (optionally with company/opportunity).',
props: {
leadId: leadDropdown(['auth']),
companyId: companyDropdown({ refreshers: ['auth'] }),
opportunityId: opportunityDropdown({ refreshers: ['auth'] }),
},
async run(context) {
const { leadId, companyId, opportunityId } = context.propsValue;
const opportunity = opportunityId
? JSON.parse(opportunityId as string)
: null;
const company = companyId ? JSON.parse(companyId as string) : null;
const lead = JSON.parse(leadId as string);
const payload = {
person: {
name: lead.name,
},
company: {
...(company
? {
id: company.id,
}
: {
name: '',
}),
},
...(opportunity
? {
opportunity: {
name: opportunity.name,
pipeline_id: opportunity.pipeline_id,
pipeline_stage_id: opportunity.pipeline_stage_id,
monetary_value: opportunity.monetary_value || undefined,
assignee_id: opportunity.assignee_id,
},
}
: {}),
};
return await CopperApiService.convertLead(context.auth, lead.id, {
details: payload,
});
},
});

View File

@@ -0,0 +1,118 @@
import {
createAction,
InputPropertyMap,
Property,
} from '@activepieces/pieces-framework';
import { CopperAuth, CopperAuthType } from '../common/constants';
import { CopperApiService } from '../common/requests';
import { ActivityTypesDropdown } from '../common/props';
export const createActivity = createAction({
auth: CopperAuth,
name: 'createActivity',
displayName: 'Create Activity',
description: 'Logs an activity related to CRM entities.',
props: {
entity: Property.StaticDropdown({
displayName: 'Parent Entity',
description: 'Select parent entity',
required: true,
options: {
options: [
{ label: 'Person', value: 'person' },
{ label: 'Company', value: 'company' },
{ label: 'Lead', value: 'lead' },
{ label: 'Opportunity', value: 'opportunity' },
{ label: 'Project', value: 'project' },
{ label: 'Task', value: 'task' },
],
},
}),
entityItemId: Property.Dropdown({
auth: CopperAuth,
displayName: 'Parent Entity Resource',
description: 'Select Resource',
required: true,
refreshers: ['auth', 'entity'],
async options(propsValue: Record<string, unknown>) {
const auth = propsValue['auth'] as CopperAuthType | undefined;
const entity = propsValue['entity'] as
| 'person'
| 'company'
| 'lead'
| 'opportunity'
| 'project'
| 'task';
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
if (!entity) {
return {
disabled: true,
placeholder: 'Select a Parent Entity first',
options: [],
};
}
const fetchFnMap = {
person: CopperApiService.fetchPeople,
company: CopperApiService.fetchCompanies,
lead: CopperApiService.fetchLeads,
opportunity: CopperApiService.fetchOpportunities,
task: CopperApiService.fetchTasks,
project: CopperApiService.fetchProjects,
};
const fetchFn = fetchFnMap[entity];
try {
const items = await fetchFn(auth);
return {
options: items.map((item: any) => ({
label: item.name,
value: item.id,
})),
};
} catch (e) {
console.error('Failed to fetch entity items', e);
return {
options: [],
placeholder: 'Unable to load entity items',
};
}
},
}),
details: Property.ShortText({
displayName: 'Details',
description: 'The details of the project',
required: false,
}),
type: ActivityTypesDropdown("user"),
},
async run(context) {
const { type, entity, entityItemId, details } = context.propsValue;
const activityType = JSON.parse(type as string);
const payload = {
parent: {
type: entity,
id: entityItemId,
},
type: {
category: activityType.category,
id: activityType.id,
},
details,
};
return await CopperApiService.createActivity(context.auth, payload);
},
});

View File

@@ -0,0 +1,114 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth, isNonEmptyStr } from '../common/constants';
import { primaryContactsDropdown } from '../common/props';
import { CopperApiService } from '../common/requests';
export const createCompany = createAction({
auth: CopperAuth,
name: 'createCompany',
displayName: 'Create Company',
description: 'Adds a new company.',
props: {
name: Property.ShortText({ displayName: 'Full Name', required: true }),
email_domain: Property.ShortText({
displayName: 'Email Domain',
description: 'E.g. democompany.com',
required: false,
}),
details: Property.ShortText({
displayName: 'Details',
required: false,
}),
phone_numbers: Property.Array({
displayName: 'Phone Numbers',
required: false,
properties: {
number: Property.ShortText({
displayName: 'Number',
required: true,
}),
category: Property.ShortText({
displayName: 'Category (e.g., mobile, work, personal)',
required: true,
}),
},
defaultValue: [],
}),
address_street: Property.ShortText({
displayName: 'Street',
required: false,
}),
address_city: Property.ShortText({ displayName: 'City', required: false }),
address_state: Property.ShortText({
displayName: 'State/Region',
required: false,
}),
address_postal_code: Property.ShortText({
displayName: 'Postal Code',
required: false,
}),
address_country: Property.ShortText({
displayName: 'Country',
required: false,
}),
primaryContactId: primaryContactsDropdown({ refreshers: ['auth'] }),
},
async run(context) {
const {
name,
email_domain,
details,
address_street,
address_city,
address_state,
address_postal_code,
address_country,
phone_numbers,
primaryContactId,
} = context.propsValue as any;
const normPhones = (Array.isArray(phone_numbers) ? phone_numbers : [])
.map((p) => ({
number: String(p?.number ?? '').trim(),
category: isNonEmptyStr(p?.category)
? String(p.category).trim()
: undefined,
}))
.filter((p) => isNonEmptyStr(p.number));
const address = [
address_street,
address_city,
address_state,
address_postal_code,
address_country,
].some(isNonEmptyStr)
? {
street: isNonEmptyStr(address_street)
? address_street.trim()
: undefined,
city: isNonEmptyStr(address_city) ? address_city.trim() : undefined,
state: isNonEmptyStr(address_state)
? address_state.trim()
: undefined,
postal_code: isNonEmptyStr(address_postal_code)
? address_postal_code.trim()
: undefined,
country: isNonEmptyStr(address_country)
? address_country.trim()
: undefined,
}
: undefined;
const body: any = {
name,
email_domain,
details,
...(normPhones.length ? { phone_numbers: normPhones } : {}),
...(address ? { address } : {}),
primary_contact_id: primaryContactId,
};
return await CopperApiService.createCompany(context.auth, body);
},
});

View File

@@ -0,0 +1,112 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth, isNonEmptyStr } from '../common/constants';
import { CopperApiService } from '../common/requests';
export const createLead = createAction({
auth: CopperAuth,
name: 'createLead',
displayName: 'Create Lead',
description: 'Adds a new lead.',
props: {
name: Property.ShortText({ displayName: 'Full Name', required: true }),
email: Property.ShortText({
displayName: 'Email',
required: true,
}),
category: Property.ShortText({
displayName: 'Category of the email address (e.g., work, personal)',
required: true,
}),
phone_numbers: Property.Array({
displayName: 'Phone Numbers',
required: false,
properties: {
number: Property.ShortText({
displayName: 'Number',
required: true,
}),
category: Property.ShortText({
displayName: 'Category (e.g., mobile, work, personal)',
required: true,
}),
},
defaultValue: [],
}),
address_street: Property.ShortText({
displayName: 'Street',
required: false,
}),
address_city: Property.ShortText({ displayName: 'City', required: false }),
address_state: Property.ShortText({
displayName: 'State/Region',
required: false,
}),
address_postal_code: Property.ShortText({
displayName: 'Postal Code',
required: false,
}),
address_country: Property.ShortText({
displayName: 'Country',
required: false,
}),
},
async run(context) {
const {
name,
email,
category,
address_street,
address_city,
address_state,
address_postal_code,
address_country,
phone_numbers,
} = context.propsValue as any;
const normPhones = (Array.isArray(phone_numbers) ? phone_numbers : [])
.map((p) => ({
number: String(p?.number ?? '').trim(),
category: isNonEmptyStr(p?.category)
? String(p.category).trim()
: undefined,
}))
.filter((p) => isNonEmptyStr(p.number));
const address = [
address_street,
address_city,
address_state,
address_postal_code,
address_country,
].some(isNonEmptyStr)
? {
street: isNonEmptyStr(address_street)
? address_street.trim()
: undefined,
city: isNonEmptyStr(address_city) ? address_city.trim() : undefined,
state: isNonEmptyStr(address_state)
? address_state.trim()
: undefined,
postal_code: isNonEmptyStr(address_postal_code)
? address_postal_code.trim()
: undefined,
country: isNonEmptyStr(address_country)
? address_country.trim()
: undefined,
}
: undefined;
const body: any = {
name,
email: {
email,
category
},
...(normPhones.length ? { phone_numbers: normPhones } : {}),
...(address ? { address } : {}),
};
return await CopperApiService.createLead(context.auth, body);
},
});

View File

@@ -0,0 +1,68 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import { pipelinesDropdown, primaryContactsDropdown } from '../common/props';
import { CopperApiService } from '../common/requests';
export const createOpportunity = createAction({
auth: CopperAuth,
name: 'createOpportunity',
displayName: 'Create Opportunity',
description: 'Adds a new opportunity.',
props: {
name: Property.ShortText({
displayName: 'Name',
description: 'The name of the opportunity',
required: true,
}),
pipelineId: pipelinesDropdown({ refreshers: ['auth'] }),
pipelineStageId: Property.Dropdown({
auth: CopperAuth,
displayName: 'Pipeline Stage',
description: 'Select a stage',
refreshers: ['auth', 'pipelineId'],
required: false,
async options({ auth, pipelineId }: any) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
if (!pipelineId) {
return {
disabled: true,
placeholder: 'Select a pipeline first',
options: [],
};
}
const pipeline = JSON.parse(pipelineId);
const stages = pipeline.stages;
return {
options: stages.map((stage: any) => ({
label: stage.name,
value: stage.id,
})),
};
},
}),
primaryContactId: primaryContactsDropdown({ refreshers: ['auth'] }),
},
async run(context) {
const { name, primaryContactId, pipelineId, pipelineStageId } =
context.propsValue;
const pipeline = JSON.parse(pipelineId as string);
return await CopperApiService.createOpportunity(context.auth, {
name,
primary_contact_id: primaryContactId,
pipeline_id: pipeline.id,
pipeline_stage_id: pipelineStageId,
});
},
});

View File

@@ -0,0 +1,133 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth, isNonEmptyStr } from '../common/constants';
import { CopperApiService } from '../common/requests';
export const createPerson = createAction({
auth: CopperAuth,
name: 'createPerson',
displayName: 'Create Person',
description: 'Adds a new person/contact.',
props: {
name: Property.ShortText({ displayName: 'Full Name', required: true }),
emails: Property.Array({
displayName: 'Emails',
required: true,
properties: {
email: Property.ShortText({
displayName: 'Email',
required: true,
}),
category: Property.ShortText({
displayName: 'Category (e.g., work, personal)',
required: true,
}),
},
defaultValue: [],
}),
phone_numbers: Property.Array({
displayName: 'Phone Numbers',
required: false,
properties: {
number: Property.ShortText({
displayName: 'Number',
required: true,
}),
category: Property.ShortText({
displayName: 'Category (e.g., mobile, work, personal)',
required: true,
}),
},
defaultValue: [],
}),
address_street: Property.ShortText({
displayName: 'Street',
required: false,
}),
address_city: Property.ShortText({ displayName: 'City', required: false }),
address_state: Property.ShortText({
displayName: 'State/Region',
required: false,
}),
address_postal_code: Property.ShortText({
displayName: 'Postal Code',
required: false,
}),
address_country: Property.ShortText({
displayName: 'Country',
required: false,
}),
},
async run(context) {
const {
name,
emails,
address_street,
address_city,
address_state,
address_postal_code,
address_country,
phone_numbers,
} = context.propsValue as any;
const normEmails = (Array.isArray(emails) ? emails : [])
.map((row) => ({
email: String(row?.email ?? '')
.trim()
.toLowerCase(),
category: isNonEmptyStr(row?.category)
? String(row.category).trim()
: undefined,
}))
.filter((e) => isNonEmptyStr(e.email));
if (normEmails.length === 0)
throw new Error('Please provide at least one valid email.');
const seen = new Set<string>();
const dedupedEmails = normEmails.filter(
(e) => !seen.has(e.email) && (seen.add(e.email), true)
);
const normPhones = (Array.isArray(phone_numbers) ? phone_numbers : [])
.map((p) => ({
number: String(p?.number ?? '').trim(),
category: isNonEmptyStr(p?.category)
? String(p.category).trim()
: undefined,
}))
.filter((p) => isNonEmptyStr(p.number));
const address = [
address_street,
address_city,
address_state,
address_postal_code,
address_country,
].some(isNonEmptyStr)
? {
street: isNonEmptyStr(address_street)
? address_street.trim()
: undefined,
city: isNonEmptyStr(address_city) ? address_city.trim() : undefined,
state: isNonEmptyStr(address_state)
? address_state.trim()
: undefined,
postal_code: isNonEmptyStr(address_postal_code)
? address_postal_code.trim()
: undefined,
country: isNonEmptyStr(address_country)
? address_country.trim()
: undefined,
}
: undefined;
const body: any = {
name,
emails: dedupedEmails,
...(normPhones.length ? { phone_numbers: normPhones } : {}),
...(address ? { address } : {}),
};
return await CopperApiService.createPerson(context.auth, body);
},
});

View File

@@ -0,0 +1,30 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import { CopperApiService } from '../common/requests';
export const createProject = createAction({
auth: CopperAuth,
name: 'createProject',
displayName: 'Create Project',
description: 'Adds a new project.',
props: {
name: Property.ShortText({
displayName: 'Name',
description: 'The name of the project',
required: true,
}),
details: Property.ShortText({
displayName: 'Details',
description: 'The details of the project',
required: false,
}),
},
async run(context) {
const { name, details } = context.propsValue;
return await CopperApiService.createProject(context.auth, {
name,
details
})
},
});

View File

@@ -0,0 +1,168 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth, CopperAuthType, toUnix } from '../common/constants';
import { CopperApiService } from '../common/requests';
import { ActivityTypesDropdown, usersDropdown } from '../common/props';
export const createTask = createAction({
auth: CopperAuth,
name: 'createTask',
displayName: 'Create Task',
description: 'Adds a new task under a person, lead, or opportunity.',
props: {
name: Property.ShortText({ displayName: 'Task Name', required: true }),
details: Property.ShortText({
displayName: 'Details',
description: 'Details fo this task',
required: false,
}),
custom_activity_type_id: ActivityTypesDropdown('user'),
assigneeId: usersDropdown({ refreshers: ['auth'] }),
entity: Property.StaticDropdown({
displayName: 'Related Record Type',
description:
'Choose the type of Copper record this task should be linked to (e.g. Person, Company, Lead, Opportunity, or Project).',
required: false,
options: {
options: [
{ label: 'Person', value: 'person' },
{ label: 'Company', value: 'company' },
{ label: 'Lead', value: 'lead' },
{ label: 'Opportunity', value: 'opportunity' },
{ label: 'Project', value: 'project' },
],
},
}),
entityItemId: Property.Dropdown({
auth: CopperAuth,
displayName: 'Related Record',
description:
'Select the specific record (from the chosen type above) that this task should be attached to. For example, pick the Person or Opportunity the task relates to.',
required: false,
refreshers: ['auth', 'entity'],
async options(propsValue: Record<string, unknown>) {
const auth = propsValue['auth'] as CopperAuthType | undefined;
const entity = propsValue['entity'] as
| 'person'
| 'company'
| 'lead'
| 'opportunity'
| 'project';
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
if (!entity) {
return {
disabled: true,
placeholder: 'Select a Parent Entity first',
options: [],
};
}
const fetchFnMap = {
person: CopperApiService.fetchPeople,
company: CopperApiService.fetchCompanies,
lead: CopperApiService.fetchLeads,
opportunity: CopperApiService.fetchOpportunities,
project: CopperApiService.fetchProjects,
} as const;
const fetchFn = fetchFnMap[entity];
try {
const items = await fetchFn(auth);
return {
options: items.map((item: any) => ({
label: item.name ?? item.title ?? `#${item.id}`,
value: item.id,
})),
};
} catch (e) {
console.error('Failed to fetch entity items', e);
return {
options: [],
placeholder: 'Unable to load entity items',
};
}
},
}),
due_date: Property.DateTime({
displayName: 'Due Date/Time',
required: false,
description:
'Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM).',
}),
reminder_date: Property.DateTime({
displayName: 'Reminder Date/Time',
required: false,
description:
'Enter date and time in 24-hour format, e.g. `2025-09-09 11:40` (11:40 AM) or `2025-09-09 13:00` (1:00 PM)',
}),
priority: Property.StaticDropdown({
displayName: 'Priority',
required: false,
options: {
disabled: false,
options: [
{ label: 'None', value: 'None' },
{ label: 'Low', value: 'Low' },
{ label: 'Medium', value: 'Medium' },
{ label: 'High', value: 'High' },
],
},
}),
tags: Property.Array({
displayName: 'Tags',
required: false,
properties: {
tag: Property.ShortText({ displayName: 'Tag', required: true }),
},
defaultValue: [],
}),
},
async run(context) {
const {
name,
details,
custom_activity_type_id,
assigneeId,
priority,
tags,
due_date,
reminder_date,
entity,
entityItemId,
} = context.propsValue;
const custom_activity_type = JSON.parse(custom_activity_type_id as string);
const tagList: string[] = Array.isArray(tags)
? tags.map((t: any) => String(t?.tag ?? '').trim()).filter(Boolean)
: [];
const payload = {
name,
details,
custom_activity_type_id: custom_activity_type.id,
...(assigneeId ? {assignee_id: assigneeId}: {}),
due_date: toUnix(due_date),
reminder_date: toUnix(reminder_date),
priority,
tags: tagList,
...(entity &&
entityItemId && {
related_resource: {
type: entity,
id: entityItemId,
},
}),
};
return await CopperApiService.createTask(context.auth, payload);
},
});

View File

@@ -0,0 +1,285 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth, toUnix } from '../common/constants';
import { CopperApiService } from '../common/requests';
import { MultiContactTypesDropdown, multiUsersDropdown } from '../common/props';
export const searchForACompany = createAction({
auth: CopperAuth,
name: 'searchForACompany',
displayName: 'Search for a Company',
description: 'Lookup a company.',
props: {
name: Property.ShortText({
displayName: 'Name',
description: 'Full name of the Company to search for.',
required: false,
}),
phone_number: Property.ShortText({
displayName: 'Phone Number',
description: 'Phone Number of the Company to search for.',
required: false,
}),
email_domains: Property.ShortText({
displayName: 'Email Domain',
required: false,
description: 'Email Domain of the Company to search for.',
}),
contact_type_ids: MultiContactTypesDropdown({}),
assignee_ids: multiUsersDropdown({ refreshers: ['auth'] }),
city: Property.ShortText({
displayName: 'City',
description: 'The city in which Company must be located.',
required: false,
}),
state: Property.ShortText({
displayName: 'State',
description: 'The state or province in which Company must be located.',
required: false,
}),
postal_code: Property.ShortText({
displayName: 'Postal Code',
description: 'The postal code in which Company must be located.',
required: false,
}),
country: Property.ShortText({
displayName: 'Country',
description:
'The two character country code where Company must be located.',
required: false,
}),
tags: Property.Array({
displayName: 'Tags',
description:
'Filter Company to those that match at least one of the tags specified.',
required: false,
defaultValue: [],
}),
socials: Property.Array({
displayName: 'Socials',
description:
'Filter Company to those that match at least one of the social accounts specified.',
required: false,
defaultValue: [],
}),
followed: Property.StaticDropdown({
displayName: 'Followed',
description: 'Filter by followed state',
required: false,
options: {
options: [
{
label: 'followed',
value: '1',
},
{
label: 'not followed',
value: '2',
},
],
},
}),
age: Property.Number({
displayName: 'Age',
description: 'The maximum age in seconds that Company must be.',
required: false,
}),
page_size: Property.Number({
displayName: 'Page Size',
description: 'Default 50. Max 200.',
required: false,
defaultValue: 50,
}),
page_number: Property.Number({
displayName: 'Page Number',
required: false,
defaultValue: 1,
}),
sort_by: Property.StaticDropdown({
displayName: 'Sort By',
description: 'The field on which to sort the results',
required: false,
options: {
options: [
{
label: 'Name',
value: 'name',
},
{
label: 'Phone',
value: 'phone',
},
{
label: 'Contact',
value: 'contact',
},
{
label: 'Contact First Name',
value: 'contact_first_name',
},
{
label: 'Contact Last Name',
value: 'contact_last_name',
},
{
label: 'Date Modified',
value: 'date_modified',
},
{
label: 'Date Created',
value: 'date_created',
},
{
label: 'Email Domain',
value: 'email_domain',
},
{
label: 'City',
value: 'city',
},
{
label: 'State',
value: 'state',
},
{
label: 'Country',
value: 'country',
},
{
label: 'Zip',
value: 'zip',
},
{
label: 'Assignee',
value: 'assignee',
},
{
label: 'Contact Group',
value: 'contact_group',
},
{
label: 'Last Interaction',
value: 'last_interaction',
},
{
label: 'Interaction Count',
value: 'interaction_count',
},
{
label: 'Primary Website',
value: 'primary_website',
},
{
label: 'Socials',
value: 'socials',
},
],
},
}),
sort_direction: Property.StaticDropdown({
displayName: 'Sort Direction',
description: 'The direction in which to sort the result',
required: false,
options: {
options: [
{
label: 'Ascending',
value: 'asc',
},
{
label: 'Descending',
value: 'desc',
},
],
},
}),
minimum_interaction_count: Property.Number({
displayName: 'Minimum Interaction Count',
required: false,
description: 'The minimum number of interactions Company must have had.',
}),
maximum_interaction_count: Property.Number({
displayName: 'Maximum Interaction Count',
required: false,
description: 'The maximum number of interactions Company must have had.',
}),
minimum_interaction_date: Property.DateTime({
displayName: 'Minimum Interaction Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.',
}),
maximum_interaction_date: Property.DateTime({
displayName: 'Maximum Interaction Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.',
}),
minimum_created_date: Property.DateTime({
displayName: 'Minimum Created Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Company are created.',
}),
maximum_created_date: Property.DateTime({
displayName: 'Maximum Created Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Company are Created.',
}),
},
async run(context) {
const {
name,
phone_number,
email_domains,
contact_type_ids,
assignee_ids,
city,
state,
postal_code,
country,
tags,
socials,
followed,
age,
page_size,
page_number,
sort_by,
sort_direction,
minimum_interaction_count,
maximum_interaction_count,
minimum_interaction_date,
maximum_interaction_date,
minimum_created_date,
maximum_created_date,
} = context.propsValue;
const payload = {
name,
phone_number,
email_domains,
contact_type_ids,
assignee_ids,
city,
state,
postal_code,
country,
tags,
socials,
followed,
age,
page_size,
page_number,
sort_by,
sort_direction,
minimum_interaction_count,
maximum_interaction_count,
minimum_interaction_date: toUnix(minimum_interaction_date),
maximum_interaction_date: toUnix(maximum_interaction_date),
minimum_created_date: toUnix(minimum_created_date),
maximum_created_date: toUnix(maximum_created_date),
};
return await CopperApiService.fetchCompanies(context.auth, payload)
},
});

View File

@@ -0,0 +1,311 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth, toUnix } from '../common/constants';
import {
MultiCustomerSourceDropdown,
MultiLeadStatusDropdown,
multiUsersDropdown,
} from '../common/props';
import { CopperApiService } from '../common/requests';
export const searchForALead = createAction({
auth: CopperAuth,
name: 'searchForALead',
displayName: 'Search for a Lead',
description: 'Lookup a lead using match criteria.',
props: {
name: Property.ShortText({
displayName: 'Name',
description: 'Full name of the Lead to search for.',
required: false,
}),
phone_number: Property.ShortText({
displayName: 'Phone Number',
description: 'Phone Number of the Lead to search for.',
required: false,
}),
emails: Property.ShortText({
displayName: 'Emails',
required: false,
description: 'Emails of the Lead to search for. ',
}),
assignee_ids: multiUsersDropdown({ refreshers: ['auth'] }),
status_ids: MultiLeadStatusDropdown({}),
customer_source_ids: MultiCustomerSourceDropdown({}),
city: Property.ShortText({
displayName: 'City',
description: 'The city in which Lead must be located.',
required: false,
}),
state: Property.ShortText({
displayName: 'State',
description: 'The state or province in which Lead must be located.',
required: false,
}),
postal_code: Property.ShortText({
displayName: 'Postal Code',
description: 'The postal code in which Lead must be located.',
required: false,
}),
country: Property.ShortText({
displayName: 'Country',
description: 'The two character country code where Lead must be located.',
required: false,
}),
tags: Property.Array({
displayName: 'Tags',
description:
'Filter Lead to those that match at least one of the tags specified.',
required: false,
defaultValue: [],
}),
socials: Property.Array({
displayName: 'Socials',
description:
'Filter Lead to those that match at least one of the social accounts specified.',
required: false,
defaultValue: [],
}),
followed: Property.StaticDropdown({
displayName: 'Followed',
description: 'Filter by followed state',
required: false,
options: {
options: [
{
label: 'followed',
value: '1',
},
{
label: 'not followed',
value: '2',
},
],
},
}),
age: Property.Number({
displayName: 'Age',
description: 'The maximum age in seconds that Lead must be.',
required: false,
}),
page_size: Property.Number({
displayName: 'Page Size',
description: 'Default 50. Max 200.',
required: false,
defaultValue: 50,
}),
page_number: Property.Number({
displayName: 'Page Number',
required: false,
defaultValue: 1,
}),
sort_by: Property.StaticDropdown({
displayName: 'Sort By',
description: 'The field on which to sort the results',
required: false,
options: {
options: [
{
label: 'Name',
value: 'name',
},
{
label: 'Company Name',
value: 'company_name',
},
{
label: 'Title',
value: 'title',
},
{
label: 'Value',
value: 'value',
},
{
label: 'Email',
value: 'email',
},
{
label: 'Phone',
value: 'phone',
},
{
label: 'Date Modified',
value: 'date_modified',
},
{
label: 'Date Created',
value: 'date_created',
},
{
label: 'City',
value: 'city',
},
{
label: 'State',
value: 'state',
},
{
label: 'Country',
value: 'country',
},
{
label: 'Zip',
value: 'zip',
},
{
label: 'Inactive Days',
value: 'inactive_days',
},
{
label: 'Socials',
value: 'socials',
},
],
},
}),
sort_direction: Property.StaticDropdown({
displayName: 'Sort Direction',
description: 'The direction in which to sort the result',
required: false,
options: {
options: [
{
label: 'Ascending',
value: 'asc',
},
{
label: 'Descending',
value: 'desc',
},
],
},
}),
include_converted_leads: Property.Checkbox({
displayName: 'Include Converted Leads',
description: 'Specify if response should contain converted leads.',
required: false,
defaultValue: false,
}),
minimum_monetary_value: Property.Number({
displayName: 'Minimum Monetary Value',
required: false,
description: 'The minimum monetary value Leads must have.',
}),
maximum_monetary_value: Property.Number({
displayName: 'Maximum Monetary Value',
required: false,
description: 'The maximum monetary value Leads must have.',
}),
minimum_interaction_count: Property.Number({
displayName: 'Minimum Interaction Count',
required: false,
description: 'The minimum number of interactions Lead must have had.',
}),
maximum_interaction_count: Property.Number({
displayName: 'Maximum Interaction Count',
required: false,
description: 'The maximum number of interactions Lead must have had.',
}),
minimum_interaction_date: Property.DateTime({
displayName: 'Minimum Interaction Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.',
}),
maximum_interaction_date: Property.DateTime({
displayName: 'Maximum Interaction Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.',
}),
minimum_created_date: Property.DateTime({
displayName: 'Minimum Created Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are created.',
}),
maximum_created_date: Property.DateTime({
displayName: 'Maximum Created Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Created.',
}),
minimum_modified_date: Property.DateTime({
displayName: 'Minimum Modified Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Lead are Modified.',
}),
maximum_modified_date: Property.DateTime({
displayName: 'Maximum Modified Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Lead are Modified.',
}),
},
async run(context) {
const {
name,
phone_number,
emails,
assignee_ids,
status_ids,
customer_source_ids,
city,
state,
postal_code,
country,
tags,
socials,
followed,
age,
page_size,
page_number,
sort_by,
sort_direction,
minimum_interaction_count,
maximum_interaction_count,
minimum_interaction_date,
maximum_interaction_date,
minimum_created_date,
maximum_created_date,
minimum_monetary_value,
maximum_monetary_value,
minimum_modified_date,
maximum_modified_date,
} = context.propsValue;
const payload = {
name,
phone_number,
emails,
assignee_ids,
status_ids,
customer_source_ids,
city,
state,
postal_code,
country,
tags,
socials,
followed,
age,
page_size,
page_number,
sort_by,
sort_direction,
minimum_interaction_count,
maximum_interaction_count,
minimum_interaction_date: toUnix(minimum_interaction_date),
maximum_interaction_date: toUnix(maximum_interaction_date),
minimum_created_date: toUnix(minimum_created_date),
maximum_created_date: toUnix(maximum_created_date),
minimum_monetary_value,
maximum_monetary_value,
minimum_modified_date: toUnix(minimum_modified_date),
maximum_modified_date: toUnix(maximum_modified_date),
};
return await CopperApiService.fetchLeads(context.auth, payload);
},
});

View File

@@ -0,0 +1,269 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth, toUnix } from '../common/constants';
import {
multiCompanyDropdown,
MultiContactTypesDropdown,
multiOpportunityDropdown,
multiUsersDropdown,
} from '../common/props';
import { CopperApiService } from '../common/requests';
export const searchForAPerson = createAction({
auth: CopperAuth,
name: 'searchForAPerson',
displayName: 'Search for a Person',
description: 'Lookup a person using match criteria.',
props: {
name: Property.ShortText({
displayName: 'Name',
description: 'Full name of the People to search for.',
required: false,
}),
phone_number: Property.ShortText({
displayName: 'Phone Number',
description: 'Phone Number of the People to search for.',
required: false,
}),
emails: Property.Array({
displayName: 'Emails',
required: false,
description: 'Emails of the People to search for.',
defaultValue: [],
}),
contact_type_ids: MultiContactTypesDropdown({}),
assignee_ids: multiUsersDropdown({ refreshers: ['auth'] }),
company_ids: multiCompanyDropdown({ refreshers: ['auth'] }),
opportunity_ids: multiOpportunityDropdown({ refreshers: ['auth'] }),
city: Property.ShortText({
displayName: 'City',
description: 'The city in which People must be located.',
required: false,
}),
state: Property.ShortText({
displayName: 'State',
description: 'The state or province in which People must be located.',
required: false,
}),
postal_code: Property.ShortText({
displayName: 'Postal Code',
description: 'The postal code in which People must be located.',
required: false,
}),
country: Property.ShortText({
displayName: 'Country',
description:
'The two character country code where People must be located.',
required: false,
}),
tags: Property.Array({
displayName: 'Tags',
description:
'Filter People to those that match at least one of the tags specified.',
required: false,
defaultValue: [],
}),
socials: Property.Array({
displayName: 'Socials',
description:
'Filter People to those that match at least one of the social accounts specified.',
required: false,
defaultValue: [],
}),
followed: Property.StaticDropdown({
displayName: 'Followed',
description: 'Filter by followed state',
required: false,
options: {
options: [
{
label: 'followed',
value: '1',
},
{
label: 'not followed',
value: '2',
},
],
},
}),
age: Property.Number({
displayName: 'Age',
description: 'The maximum age in seconds that People must be.',
required: false,
}),
page_size: Property.Number({
displayName: 'Page Size',
description: 'Default 50. Max 200.',
required: false,
defaultValue: 50,
}),
page_number: Property.Number({
displayName: 'Page Number',
required: false,
defaultValue: 1,
}),
sort_by: Property.StaticDropdown({
displayName: 'Sort By',
description: 'The field on which to sort the results',
required: false,
options: {
options: [
{
label: 'Name',
value: 'name',
},
{
label: 'Title',
value: 'title',
},
{
label: 'Email',
value: 'email',
},
{
label: 'Phone',
value: 'phone',
},
{
label: 'Date Modified',
value: 'date_modified',
},
{
label: 'Date Created',
value: 'date_created',
},
{
label: 'City',
value: 'city',
},
{
label: 'State',
value: 'state',
},
{
label: 'Country',
value: 'country',
},
{
label: 'Zip',
value: 'zip',
},
{
label: 'Socials',
value: 'socials',
},
],
},
}),
sort_direction: Property.StaticDropdown({
displayName: 'Sort Direction',
description: 'The direction in which to sort the result',
required: false,
options: {
options: [
{
label: 'Ascending',
value: 'asc',
},
{
label: 'Descending',
value: 'desc',
},
],
},
}),
minimum_interaction_count: Property.Number({
displayName: 'Minimum Interaction Count',
required: false,
description: 'The minimum number of interactions People must have had.',
}),
maximum_interaction_count: Property.Number({
displayName: 'Maximum Interaction Count',
required: false,
description: 'The maximum number of interactions People must have had.',
}),
minimum_interaction_date: Property.DateTime({
displayName: 'Minimum Interaction Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.',
}),
maximum_interaction_date: Property.DateTime({
displayName: 'Maximum Interaction Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.',
}),
minimum_created_date: Property.DateTime({
displayName: 'Minimum Created Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date People are created.',
}),
maximum_created_date: Property.DateTime({
displayName: 'Maximum Created Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date People are Created.',
}),
},
async run(context) {
const {
name,
phone_number,
emails,
contact_type_ids,
assignee_ids,
company_ids,
opportunity_ids,
city,
state,
postal_code,
country,
tags,
socials,
followed,
age,
page_size,
page_number,
sort_by,
sort_direction,
minimum_interaction_count,
maximum_interaction_count,
minimum_interaction_date,
maximum_interaction_date,
minimum_created_date,
maximum_created_date,
} = context.propsValue;
const payload = {
name,
phone_number,
emails,
contact_type_ids,
assignee_ids,
company_ids,
opportunity_ids,
city,
state,
postal_code,
country,
tags,
socials,
followed,
age,
page_size,
page_number,
sort_by,
sort_direction,
minimum_interaction_count,
maximum_interaction_count,
minimum_interaction_date: toUnix(minimum_interaction_date),
maximum_interaction_date: toUnix(maximum_interaction_date),
minimum_created_date: toUnix(minimum_created_date),
maximum_created_date: toUnix(maximum_created_date),
};
return await CopperApiService.fetchPeople(context.auth, payload);
},
});

View File

@@ -0,0 +1,180 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth, toUnix } from '../common/constants';
import { CopperApiService } from '../common/requests';
import { multiUsersDropdown } from '../common/props';
export const searchForAProject = createAction({
auth: CopperAuth,
name: 'searchForAProject',
displayName: 'Search for a Project',
description: 'Lookup a project.',
props: {
name: Property.ShortText({
displayName: 'Name',
description: 'Full name of the Opportunity to search for.',
required: false,
}),
assignee_ids: multiUsersDropdown({ refreshers: ['auth'] }),
statuses: Property.StaticMultiSelectDropdown({
displayName: 'Status',
description: 'Filter by Opportunity status',
required: false,
options: {
options: [
{
label: 'Open',
value: 'Open',
},
{
label: 'Completed',
value: 'Completed',
},
],
},
}),
tags: Property.Array({
displayName: 'Tags',
description:
'Filter People to those that match at least one of the tags specified.',
required: false,
defaultValue: [],
}),
followed: Property.StaticDropdown({
displayName: 'Followed',
description: 'Filter by followed state',
required: false,
options: {
options: [
{
label: 'followed',
value: '1',
},
{
label: 'not followed',
value: '2',
},
],
},
}),
page_size: Property.Number({
displayName: 'Page Size',
description: 'Default 50. Max 200.',
required: false,
defaultValue: 50,
}),
page_number: Property.Number({
displayName: 'Page Number',
required: false,
defaultValue: 1,
}),
sort_by: Property.StaticDropdown({
displayName: 'Sort By',
description: 'The field on which to sort the results',
required: false,
options: {
options: [
{
label: 'Name',
value: 'name',
},
{
label: 'Assigned To',
value: 'assigned_to',
},
{
label: 'Related To',
value: 'related_to',
},
{
label: 'Status',
value: 'status',
},
{
label: 'Date Modified',
value: 'date_modified',
},
{
label: 'Date Created',
value: 'date_created',
},
],
},
}),
sort_direction: Property.StaticDropdown({
displayName: 'Sort Direction',
description: 'The direction in which to sort the result',
required: false,
options: {
options: [
{
label: 'Ascending',
value: 'asc',
},
{
label: 'Descending',
value: 'desc',
},
],
},
}),
minimum_created_date: Property.DateTime({
displayName: 'Minimum Created Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.',
}),
maximum_created_date: Property.DateTime({
displayName: 'Maximum Created Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.',
}),
minimum_modified_date: Property.DateTime({
displayName: 'Minimum Modified Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.',
}),
maximum_modified_date: Property.DateTime({
displayName: 'Maximum Modified Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.',
}),
},
async run(context) {
const {
name,
assignee_ids,
statuses,
tags,
followed,
page_size,
page_number,
sort_by,
sort_direction,
minimum_created_date,
maximum_created_date,
minimum_modified_date,
maximum_modified_date,
} = context.propsValue;
const payload = {
name,
assignee_ids: assignee_ids || [],
statuses,
followed,
page_size,
page_number,
sort_by,
tags,
sort_direction,
minimum_created_date: toUnix(minimum_created_date),
maximum_created_date: toUnix(maximum_created_date),
minimum_modified_date: toUnix(minimum_modified_date),
maximum_modified_date: toUnix(maximum_modified_date),
};
return await CopperApiService.fetchProjects(context.auth, payload);
},
});

View File

@@ -0,0 +1,157 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth, CopperAuthType, toUnix } from '../common/constants';
import { MultiActivityTypesDropdown } from '../common/props';
import { CopperApiService } from '../common/requests';
export const searchForAnActivity = createAction({
auth: CopperAuth,
name: 'searchForAnActivity',
displayName: 'Search for an Activity',
description: 'Find an existing activity by type/criteria.',
props: {
entity: Property.StaticDropdown({
displayName: 'Parent Entity',
description: 'Select parent entity',
required: false,
options: {
options: [
{ label: 'Person', value: 'person' },
{ label: 'Company', value: 'company' },
{ label: 'Lead', value: 'lead' },
{ label: 'Opportunity', value: 'opportunity' },
{ label: 'Project', value: 'project' },
{ label: 'Task', value: 'task' },
],
},
}),
entityItemId: Property.Dropdown({
auth: CopperAuth,
displayName: 'Parent Entity Resource',
description: 'Select Resource',
required: false,
refreshers: ['auth', 'entity'],
async options(propsValue: Record<string, unknown>) {
const auth = propsValue['auth'] as CopperAuthType | undefined;
const entity = propsValue['entity'] as
| 'person'
| 'company'
| 'lead'
| 'opportunity'
| 'project'
| 'task';
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
if (!entity) {
return {
disabled: true,
placeholder: 'Select a Parent Entity first',
options: [],
};
}
const fetchFnMap = {
person: CopperApiService.fetchPeople,
company: CopperApiService.fetchCompanies,
lead: CopperApiService.fetchLeads,
opportunity: CopperApiService.fetchOpportunities,
task: CopperApiService.fetchTasks,
project: CopperApiService.fetchProjects,
};
const fetchFn = fetchFnMap[entity];
try {
const items = await fetchFn(auth);
return {
options: items.map((item: any) => ({
label: item.name,
value: item.id,
})),
};
} catch (e) {
console.error('Failed to fetch entity items', e);
return {
options: [],
placeholder: 'Unable to load entity items',
};
}
},
}),
activity_types: MultiActivityTypesDropdown({}),
page_size: Property.Number({
displayName: 'Page Size',
description: 'Default 50. Max 200.',
required: false,
defaultValue: 50,
}),
page_number: Property.Number({
displayName: 'Page Number',
required: false,
defaultValue: 1,
}),
minimum_activity_date: Property.DateTime({
displayName: 'Minimum Activity Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 11:40. The timestamp of the earliest activity date.',
}),
maximum_activity_date: Property.DateTime({
displayName: 'Maximum Activity Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest activity date.',
}),
full_result: Property.Checkbox({
displayName: 'Full Result',
description:
'(Optional) If set, search performance improves but duplicate activity logs may be returned',
required: false,
defaultValue: false,
}),
},
async run(ctx) {
const {
page_size,
page_number,
activity_types,
entity,
entityItemId,
minimum_activity_date,
maximum_activity_date,
full_result,
} = ctx.propsValue;
const parsed_activity_types = (activity_types || []).map(
(activity: any) => {
const parsed_activity = JSON.parse(activity);
return {
id: parsed_activity.id,
category: parsed_activity.category,
};
}
);
const payload = {
...(entity &&
entityItemId && {
parent: { id: entityItemId, type: entity },
}),
activity_types: parsed_activity_types,
page_number,
page_size,
minimum_activity_date: toUnix(minimum_activity_date),
maximum_activity_date: toUnix(maximum_activity_date),
full_result,
};
return await CopperApiService.fetchActivities(ctx.auth, payload);
},
});

View File

@@ -0,0 +1,381 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { CopperAuth, toUnix } from '../common/constants';
import {
multiCompanyDropdown,
MultiCustomerSourceDropdown,
MultiLossReasonsDropdown,
multiPipelinesDropdown,
multiPrimaryContactsDropdown,
multiUsersDropdown,
pipelinesDropdown,
} from '../common/props';
import { CopperApiService } from '../common/requests';
export const searchForAnOpportunity = createAction({
auth: CopperAuth,
name: 'searchForAnOpportunity',
displayName: 'Search for an Opportunity',
description: 'Lookup an opportunity.',
props: {
name: Property.ShortText({
displayName: 'Name',
description: 'Full name of the Opportunity to search for.',
required: false,
}),
assignee_ids: multiUsersDropdown({ refreshers: ['auth'] }),
company_ids: multiCompanyDropdown({ refreshers: ['auth'] }),
status_ids: Property.StaticMultiSelectDropdown({
displayName: 'Status',
description: 'Filter by Opportunity status',
required: false,
options: {
options: [
{
label: 'Open',
value: '0',
},
{
label: 'Won',
value: '1',
},
{
label: 'Lost',
value: '2',
},
{
label: 'Abandoned',
value: '3',
},
],
},
}),
priorities: Property.StaticMultiSelectDropdown({
displayName: 'Priority',
required: false,
options: {
disabled: false,
options: [
{ label: 'None', value: 'None' },
{ label: 'Low', value: 'Low' },
{ label: 'Medium', value: 'Medium' },
{ label: 'High', value: 'High' },
],
},
}),
pipeline_ids: multiPipelinesDropdown({ refreshers: ['auth'] }),
pipeline_stage_ids: Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Pipeline Stage',
description: 'Select a stage',
refreshers: ['auth', 'pipeline_ids'],
required: false,
async options({ auth, pipeline_ids }: any) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
if (!pipeline_ids) {
return {
disabled: true,
placeholder: 'Select a pipeline first',
options: [],
};
}
const stages = pipeline_ids.flatMap((pipeline: any) => {
const stages = JSON.parse(pipeline).stages ?? [];
return stages;
});
return {
options: stages.map((stage: any) => ({
label: stage.name,
value: stage.id,
})),
};
},
}),
primary_contact_ids: multiPrimaryContactsDropdown({ refreshers: ['auth'] }),
customer_source_ids: MultiCustomerSourceDropdown({}),
loss_reason_ids: MultiLossReasonsDropdown({}),
tags: Property.Array({
displayName: 'Tags',
description:
'Filter People to those that match at least one of the tags specified.',
required: false,
defaultValue: [],
}),
followed: Property.StaticDropdown({
displayName: 'Followed',
description: 'Filter by followed state',
required: false,
options: {
options: [
{
label: 'followed',
value: '1',
},
{
label: 'not followed',
value: '2',
},
],
},
}),
page_size: Property.Number({
displayName: 'Page Size',
description: 'Default 50. Max 200.',
required: false,
defaultValue: 50,
}),
page_number: Property.Number({
displayName: 'Page Number',
required: false,
defaultValue: 1,
}),
sort_by: Property.StaticDropdown({
displayName: 'Sort By',
description: 'The field on which to sort the results',
required: false,
options: {
options: [
{
label: 'Assignee',
value: 'assignee',
},
{
label: 'Company Name',
value: 'company_name',
},
{
label: 'Customer Source ID',
value: 'customer_source_id',
},
{
label: 'Date Created',
value: 'date_created',
},
{
label: 'Date Modified',
value: 'date_modified',
},
{
label: 'Inactive Days',
value: 'inactive_days',
},
{
label: 'Interaction Count',
value: 'interaction_count',
},
{
label: 'Last Interaction',
value: 'last_interaction',
},
{
label: 'Monetary Unit',
value: 'monetary_unit',
},
{
label: 'Monetary Value',
value: 'monetary_value',
},
{
label: 'Name',
value: 'name',
},
{
label: 'Primary Contact',
value: 'primary_contact',
},
{
label: 'Priority',
value: 'priority',
},
{
label: 'Stage',
value: 'stage',
},
{
label: 'Status',
value: 'status',
},
],
},
}),
sort_direction: Property.StaticDropdown({
displayName: 'Sort Direction',
description: 'The direction in which to sort the result',
required: false,
options: {
options: [
{
label: 'Ascending',
value: 'asc',
},
{
label: 'Descending',
value: 'desc',
},
],
},
}),
minimum_monetary_value: Property.Number({
displayName: 'Minimum Monetary Value',
required: false,
description: 'The minimum monetary value Opportunities must have.',
}),
maximum_monetary_value: Property.Number({
displayName: 'Maximum Monetary Value',
required: false,
description: 'The maximum monetary value Opportunities must have.',
}),
minimum_interaction_count: Property.Number({
displayName: 'Minimum Interaction Count',
required: false,
description:
'The minimum number of interactions Opportunity must have had.',
}),
maximum_interaction_count: Property.Number({
displayName: 'Maximum Interaction Count',
required: false,
description:
'The maximum number of interactions Opportunity must have had.',
}),
minimum_close_date: Property.DateTime({
displayName: 'Minimum Interaction Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date close date.',
}),
maximum_close_date: Property.DateTime({
displayName: 'Maximum Interaction Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date close date.',
}),
minimum_interaction_date: Property.DateTime({
displayName: 'Minimum Interaction Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of the last interaction.',
}),
maximum_interaction_date: Property.DateTime({
displayName: 'Maximum Interaction Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of the last interaction.',
}),
minimum_stage_change_date: Property.DateTime({
displayName: 'Minimum Stage Change Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date of a stage change.',
}),
maximum_stage_change_date: Property.DateTime({
displayName: 'Maximum Stage Change Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date of a stage change.',
}),
minimum_created_date: Property.DateTime({
displayName: 'Minimum Created Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are created.',
}),
maximum_created_date: Property.DateTime({
displayName: 'Maximum Created Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Created.',
}),
minimum_modified_date: Property.DateTime({
displayName: 'Minimum Modified Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the earliest date Opportunity are Modified.',
}),
maximum_modified_date: Property.DateTime({
displayName: 'Maximum Modified Date',
required: false,
description:
'24-hour format, e.g. 2025-09-10 13:00. The timestamp of the latest date Opportunity are Modified.',
}),
},
async run(context) {
const {
name,
assignee_ids,
status_ids,
customer_source_ids,
pipeline_ids,
pipeline_stage_ids,
company_ids,
tags,
followed,
page_size,
page_number,
sort_by,
sort_direction,
priorities,
minimum_interaction_count,
maximum_interaction_count,
minimum_interaction_date,
maximum_interaction_date,
minimum_created_date,
maximum_created_date,
minimum_monetary_value,
maximum_monetary_value,
minimum_modified_date,
maximum_modified_date,
minimum_close_date,
minimum_stage_change_date,
maximum_close_date,
maximum_stage_change_date,
primary_contact_ids,
loss_reason_ids,
} = context.propsValue;
const payload = {
name,
assignee_ids,
status_ids,
customer_source_ids,
pipeline_ids: (pipeline_ids ?? []).flatMap((pipeline: any) => {
const id = JSON.parse(pipeline).id ?? [];
return id;
}),
pipeline_stage_ids,
company_ids,
primary_contact_ids,
loss_reason_ids,
tags,
priorities,
followed,
page_size,
page_number,
sort_by,
sort_direction,
minimum_interaction_count,
maximum_interaction_count,
minimum_interaction_date: toUnix(minimum_interaction_date),
maximum_interaction_date: toUnix(maximum_interaction_date),
minimum_created_date: toUnix(minimum_created_date),
maximum_created_date: toUnix(maximum_created_date),
minimum_monetary_value,
maximum_monetary_value,
minimum_modified_date: toUnix(minimum_modified_date),
maximum_modified_date: toUnix(maximum_modified_date),
minimum_close_date: toUnix(minimum_close_date),
minimum_stage_change_date: toUnix(minimum_stage_change_date),
maximum_close_date: toUnix(maximum_close_date),
maximum_stage_change_date: toUnix(maximum_stage_change_date),
};
return await CopperApiService.fetchOpportunities(context.auth, payload);
},
});

View File

@@ -0,0 +1,151 @@
import {
createAction,
InputPropertyMap,
Property,
} from '@activepieces/pieces-framework';
import { CopperAuth, isNonEmptyStr } from '../common/constants';
import { companyDropdown, primaryContactsDropdown } from '../common/props';
import { CopperApiService } from '../common/requests';
export const updateCompany = createAction({
auth: CopperAuth,
name: 'updateCompany',
displayName: 'Update Company',
description: 'Updates a company record.',
props: {
companyId: companyDropdown({ refreshers: ['auth'], required: true }),
fields: Property.DynamicProperties({
auth: CopperAuth,
displayName: '',
description: '',
refreshers: ['auth', 'companyId'],
required: false,
props: async ({ auth, companyId }: any): Promise<InputPropertyMap> => {
if (!auth || !companyId) return {};
const company = JSON.parse(companyId);
return {
name: Property.ShortText({
displayName: 'Full Name',
required: true,
defaultValue: company.name,
}),
email_domain: Property.ShortText({
displayName: 'Email Domain',
description: 'E.g. democompany.com',
required: false,
defaultValue: company.email_domain,
}),
details: Property.ShortText({
displayName: 'Details',
required: false,
defaultValue: company.details,
}),
phone_numbers: Property.Array({
displayName: 'Phone Numbers',
required: false,
properties: {
number: Property.ShortText({
displayName: 'Number',
required: true,
}),
category: Property.ShortText({
displayName: 'Category (e.g., mobile, work, personal)',
required: true,
}),
},
defaultValue: company.phone_numbers,
}),
address_street: Property.ShortText({
displayName: 'Street',
required: false,
defaultValue: company.address?.street,
}),
address_city: Property.ShortText({
displayName: 'City',
required: false,
defaultValue: company.address?.city,
}),
address_state: Property.ShortText({
displayName: 'State/Region',
required: false,
defaultValue: company.address?.state,
}),
address_postal_code: Property.ShortText({
displayName: 'Postal Code',
required: false,
defaultValue: company.address?.postal_code,
}),
address_country: Property.ShortText({
displayName: 'Country',
required: false,
defaultValue: company.address?.country,
}),
};
},
}),
primaryContactId: primaryContactsDropdown({ refreshers: ['auth'] }),
},
async run(context) {
const { fields, companyId, primaryContactId } = context.propsValue;
const company = JSON.parse(companyId as string);
const {
name,
email_domain,
details,
address_street,
address_city,
address_state,
address_postal_code,
address_country,
phone_numbers,
} = fields as any;
const normPhones = (Array.isArray(phone_numbers) ? phone_numbers : [])
.map((p) => ({
number: String(p?.number ?? '').trim(),
category: isNonEmptyStr(p?.category)
? String(p.category).trim()
: undefined,
}))
.filter((p) => isNonEmptyStr(p.number));
const address = [
address_street,
address_city,
address_state,
address_postal_code,
address_country,
].some(isNonEmptyStr)
? {
street: isNonEmptyStr(address_street)
? address_street.trim()
: undefined,
city: isNonEmptyStr(address_city) ? address_city.trim() : undefined,
state: isNonEmptyStr(address_state)
? address_state.trim()
: undefined,
postal_code: isNonEmptyStr(address_postal_code)
? address_postal_code.trim()
: undefined,
country: isNonEmptyStr(address_country)
? address_country.trim()
: undefined,
}
: undefined;
const body: any = {
name,
email_domain,
details,
...(normPhones.length ? { phone_numbers: normPhones } : {}),
...(address ? { address } : {}),
primary_contact_id: primaryContactId,
};
return await CopperApiService.updateCompany(context.auth, company.id, body);
},
});

View File

@@ -0,0 +1,150 @@
import {
createAction,
InputPropertyMap,
Property,
} from '@activepieces/pieces-framework';
import { CopperAuth, isNonEmptyStr } from '../common/constants';
import { leadDropdown, peopleDropdown } from '../common/props';
import { CopperApiService } from '../common/requests';
export const updateLead = createAction({
auth: CopperAuth,
name: 'updateLead',
displayName: 'Update Lead',
description: 'Updates an existing lead.',
props: {
leadId: leadDropdown(['auth']),
fields: Property.DynamicProperties({
displayName: '',
description: '',
refreshers: ['auth', 'leadId'],
required: false,
auth: CopperAuth,
props: async ({ auth, leadId }) => {
if (!auth || !leadId) return {};
const lead = JSON.parse(leadId as string);
const map:InputPropertyMap= {
name: Property.ShortText({
displayName: 'Full Name',
required: true,
defaultValue: lead.name,
}),
email: Property.ShortText({
displayName: 'Email',
required: true,
defaultValue: lead.email.email,
}),
category: Property.ShortText({
displayName: 'Category of the email address (e.g., work, personal)',
required: true,
defaultValue: lead.email.category,
}),
phone_numbers: Property.Array({
displayName: 'Phone Numbers',
required: false,
properties: {
number: Property.ShortText({
displayName: 'Number',
required: true,
}),
category: Property.ShortText({
displayName: 'Category (e.g., mobile, work, personal)',
required: true,
}),
},
defaultValue: lead.phone_numbers,
}),
address_street: Property.ShortText({
displayName: 'Street',
required: false,
defaultValue: lead.address?.street,
}),
address_city: Property.ShortText({
displayName: 'City',
required: false,
defaultValue: lead.address?.city,
}),
address_state: Property.ShortText({
displayName: 'State/Region',
required: false,
defaultValue: lead.address?.state,
}),
address_postal_code: Property.ShortText({
displayName: 'Postal Code',
required: false,
defaultValue: lead.address?.postal_code,
}),
address_country: Property.ShortText({
displayName: 'Country',
required: false,
defaultValue: lead.address?.country,
}),
};
return map;
},
}),
},
async run(context) {
const fields = (context.propsValue as any).fields;
const leadId = (context.propsValue as any).leadId;
const lead = JSON.parse(leadId);
const {
name,
email,
category,
address_street,
address_city,
address_state,
address_postal_code,
address_country,
phone_numbers,
} = fields;
const normPhones = (Array.isArray(phone_numbers) ? phone_numbers : [])
.map((p) => ({
number: String(p?.number ?? '').trim(),
category: isNonEmptyStr(p?.category)
? String(p.category).trim()
: undefined,
}))
.filter((p) => isNonEmptyStr(p.number));
const address = [
address_street,
address_city,
address_state,
address_postal_code,
address_country,
].some(isNonEmptyStr)
? {
street: isNonEmptyStr(address_street)
? address_street.trim()
: undefined,
city: isNonEmptyStr(address_city) ? address_city.trim() : undefined,
state: isNonEmptyStr(address_state)
? address_state.trim()
: undefined,
postal_code: isNonEmptyStr(address_postal_code)
? address_postal_code.trim()
: undefined,
country: isNonEmptyStr(address_country)
? address_country.trim()
: undefined,
}
: undefined;
const body: any = {
name,
email: {
email,
category,
},
...(normPhones.length ? { phone_numbers: normPhones } : {}),
...(address ? { address } : {}),
};
return await CopperApiService.updateLead(context.auth, lead.id, body);
},
});

View File

@@ -0,0 +1,109 @@
import {
createAction,
Property,
InputPropertyMap,
} from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import {
opportunityDropdown,
pipelinesDropdown,
primaryContactsDropdown,
} from '../common/props';
import { CopperApiService } from '../common/requests';
export const updateOpportunity = createAction({
auth: CopperAuth,
name: 'updateOpportunity',
displayName: 'Update Opportunity',
description: 'Updates an opportunity using match criteria.',
props: {
opportunityId: opportunityDropdown({
refreshers: ['auth'],
required: true,
}),
updateFields: Property.DynamicProperties({
auth: CopperAuth,
displayName: '',
description: '',
required: false,
refreshers: ['auth', 'opportunityId'],
props: async ({
auth,
opportunityId,
}: any): Promise<InputPropertyMap> => {
if (!auth || !opportunityId) return {};
const opportunity = JSON.parse(opportunityId);
return {
name: Property.ShortText({
displayName: 'Name',
description: 'The name of the opportunity',
required: true,
defaultValue: opportunity.name,
}),
};
},
}),
pipelineId: pipelinesDropdown({ refreshers: ['auth'] }),
pipelineStageId: Property.Dropdown({
auth: CopperAuth,
displayName: 'Pipeline Stage',
description: 'Select a stage',
refreshers: ['auth', 'pipelineId'],
required: false,
async options({ auth, pipelineId }: any) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
if (!pipelineId) {
return {
disabled: true,
placeholder: 'Select a pipeline first',
options: [],
};
}
const pipeline = JSON.parse(pipelineId);
const stages = pipeline.stages;
return {
options: stages.map((stage: any) => ({
label: stage.name,
value: stage.id,
})),
};
},
}),
primaryContactId: primaryContactsDropdown({ refreshers: ['auth'] }),
},
async run(context) {
const {
updateFields,
primaryContactId,
pipelineId,
pipelineStageId,
opportunityId,
} = context.propsValue;
const pipeline = JSON.parse(pipelineId as string);
const opportunity = JSON.parse(opportunityId as string);
return await CopperApiService.updateOpportunity(
context.auth,
opportunity.id,
{
name: (updateFields as any).name,
primary_contact_id: primaryContactId,
pipeline_id: pipeline.id,
pipeline_stage_id: pipelineStageId,
}
);
},
});

View File

@@ -0,0 +1,172 @@
import {
createAction,
InputPropertyMap,
Property,
} from '@activepieces/pieces-framework';
import { CopperAuth, isNonEmptyStr } from '../common/constants';
import { peopleDropdown } from '../common/props';
import { CopperApiService } from '../common/requests';
export const updatePerson = createAction({
auth: CopperAuth,
name: 'updatePerson',
displayName: 'Update Person',
description: 'Updates a person based on matching criteria.',
props: {
personId: peopleDropdown(['auth']),
fields: Property.DynamicProperties({
displayName: '',
description: '',
refreshers: ['auth', 'personId'],
required: false,
auth: CopperAuth,
props: async ({ auth, personId }) => {
if (!auth || !personId) return {};
const person = JSON.parse(personId as string);
const map:InputPropertyMap= {
name: Property.ShortText({
displayName: 'Full Name',
required: true,
defaultValue: person.name,
}),
emails: Property.Array({
displayName: 'Emails',
required: true,
properties: {
email: Property.ShortText({
displayName: 'Email',
required: true,
}),
category: Property.ShortText({
displayName: 'Category (e.g., work, personal)',
required: true,
}),
},
defaultValue: person.emails,
}),
phone_numbers: Property.Array({
displayName: 'Phone Numbers',
required: false,
properties: {
number: Property.ShortText({
displayName: 'Number',
required: true,
}),
category: Property.ShortText({
displayName: 'Category (e.g., mobile, work, personal)',
required: true,
}),
},
defaultValue: person.phone_numbers,
}),
address_street: Property.ShortText({
displayName: 'Street',
required: false,
defaultValue: person.address?.street,
}),
address_city: Property.ShortText({
displayName: 'City',
required: false,
defaultValue: person.address?.city,
}),
address_state: Property.ShortText({
displayName: 'State/Region',
required: false,
defaultValue: person.address?.state,
}),
address_postal_code: Property.ShortText({
displayName: 'Postal Code',
required: false,
defaultValue: person.address?.postal_code,
}),
address_country: Property.ShortText({
displayName: 'Country',
required: false,
defaultValue: person.address?.country,
}),
} ;
return map;
},
}),
},
async run(context) {
const fields = (context.propsValue as any).fields;
const personId = (context.propsValue as any).personId;
const person = JSON.parse(personId);
const {
name,
emails,
address_street,
address_city,
address_state,
address_postal_code,
address_country,
phone_numbers,
} = fields;
const normEmails = (Array.isArray(emails) ? emails : [])
.map((row) => ({
email: String(row?.email ?? '')
.trim()
.toLowerCase(),
category: isNonEmptyStr(row?.category)
? String(row.category).trim()
: undefined,
}))
.filter((e) => isNonEmptyStr(e.email));
if (normEmails.length === 0)
throw new Error('Please provide at least one valid email.');
const seen = new Set<string>();
const dedupedEmails = normEmails.filter(
(e) => !seen.has(e.email) && (seen.add(e.email), true)
);
const normPhones = (Array.isArray(phone_numbers) ? phone_numbers : [])
.map((p) => ({
number: String(p?.number ?? '').trim(),
category: isNonEmptyStr(p?.category)
? String(p.category).trim()
: undefined,
}))
.filter((p) => isNonEmptyStr(p.number));
const address = [
address_street,
address_city,
address_state,
address_postal_code,
address_country,
].some(isNonEmptyStr)
? {
street: isNonEmptyStr(address_street)
? address_street.trim()
: undefined,
city: isNonEmptyStr(address_city) ? address_city.trim() : undefined,
state: isNonEmptyStr(address_state)
? address_state.trim()
: undefined,
postal_code: isNonEmptyStr(address_postal_code)
? address_postal_code.trim()
: undefined,
country: isNonEmptyStr(address_country)
? address_country.trim()
: undefined,
}
: undefined;
const body: any = {
name,
emails: dedupedEmails,
...(normPhones.length ? { phone_numbers: normPhones } : {}),
...(address ? { address } : {}),
};
return await CopperApiService.updatePerson(context.auth, person.id, body);
},
});

View File

@@ -0,0 +1,58 @@
import {
createAction,
InputPropertyMap,
Property,
} from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import { projectsDropdown } from '../common/props';
import { CopperApiService } from '../common/requests';
export const updateProject = createAction({
auth: CopperAuth,
name: 'updateProject',
displayName: 'Update Project',
description: 'Updates a project record.',
props: {
projectId: projectsDropdown({ refreshers: ['auth'], required: true }),
updateFields: Property.DynamicProperties({
displayName: '',
description: '',
refreshers: ['auth', 'projectId'],
auth: CopperAuth,
required: false,
props: async ({ auth, projectId }: any): Promise<InputPropertyMap> => {
if (!auth || !projectId) return {};
const project = JSON.parse(projectId);
const map:InputPropertyMap= {
name: Property.ShortText({
displayName: 'Name',
description: 'The name of the project',
required: true,
defaultValue: project.name,
}),
details: Property.ShortText({
displayName: 'Details',
description: 'The details of the project',
required: false,
defaultValue: project.details,
}),
};
return map;
},
}),
},
async run(context) {
const { projectId, updateFields } = context.propsValue;
const { name, details } = updateFields as any;
const project = JSON.parse(projectId as string);
return await CopperApiService.updateProject(context.auth, project.id, {
name,
details,
});
},
});

View File

@@ -0,0 +1,67 @@
import { AppConnectionValueForAuthProperty, PieceAuth, Property } from '@activepieces/pieces-framework';
import { CopperApiService } from './requests';
import { AppConnectionType } from '@activepieces/shared';
export const BASE_URL = 'https://api.copper.com/developer_api';
export const CopperAuth = PieceAuth.CustomAuth({
description: '',
required: true,
props: {
email: Property.ShortText({
displayName: 'Email Address',
description: 'Email Address of the Token Owner',
required: true,
}),
apiKey: Property.ShortText({
displayName: 'API Key',
description: 'Your API Key in settings > integrations',
required: true,
}),
},
validate: async ({ auth }) => {
try {
await CopperApiService.fetchCurrentUser({props: auth, type: AppConnectionType.CUSTOM_AUTH})
return {
valid: true,
};
} catch (err) {
return {
valid: false,
error: "Invalid API Credentials, please check your credentials and try again"
};
}
},
});
export const API_ENDPOINTS = {
USERS: '/users',
WEBHOOKS: '/webhooks',
PEOPLE: '/people',
LEADS: '/leads',
COMPANIES: '/companies',
OPPORTUNITIES: '/opportunities',
TASKS: '/tasks',
PIPELINES: '/pipelines',
PROJECTS: '/projects',
};
export type CopperAuthType = AppConnectionValueForAuthProperty<typeof CopperAuth>;
export const isNonEmptyStr = (v: any) => typeof v === 'string' && v.trim().length > 0;
export const toUnix = (iso?: string | null) =>
iso ? Math.floor(new Date(iso).getTime() / 1000) : undefined;
export type CopperActivity = {
id: number;
name?: string;
details?: string;
assignee_id?: number;
custom_activity_type_id?: number;
parent?: { type: 'person'|'company'|'lead'|'opportunity'|'project'; id: number };
activity_date?: number; // unix seconds
date_created: number; // unix seconds
date_modified?: number; // unix seconds
tags?: string[];
};

View File

@@ -0,0 +1,766 @@
import { Property } from '@activepieces/pieces-framework';
import { CopperApiService } from './requests';
import { CopperAuth } from './constants';
export const peopleDropdown = (refreshers: string[]) =>
Property.Dropdown({
displayName: 'Person',
description: 'select a person',
required: true,
refreshers,
auth: CopperAuth,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const people = await CopperApiService.fetchPeople(auth);
return {
options: people.map((person: any) => ({
label: person.name,
value: JSON.stringify(person),
})),
};
} catch (e) {
console.error('Failed to fetch campaigns', e);
return {
options: [],
placeholder: 'Unable to load campaigns',
};
}
},
});
export const leadDropdown = (refreshers: string[]) =>
Property.Dropdown({
auth: CopperAuth,
displayName: 'Lead',
description: 'select a Lead',
required: true,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const leads = await CopperApiService.fetchLeads(auth);
return {
options: leads.map((lead: any) => ({
label: lead.name,
value: JSON.stringify(lead),
})),
};
} catch (e) {
console.error('Failed to fetch leads', e);
return {
options: [],
placeholder: 'Unable to load leads',
};
}
},
});
export const companyDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.Dropdown({
auth: CopperAuth,
displayName: 'Company',
description: 'select a Company',
required,
refreshers,
async options({ auth }: any) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const companies = await CopperApiService.fetchCompanies(auth);
return {
options: companies.map((company: any) => ({
label: company.name,
value: JSON.stringify(company),
})),
};
} catch (e) {
console.error('Failed to fetch companies', e);
return {
options: [],
placeholder: 'Unable to load companies',
};
}
},
});
export const multiCompanyDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Company',
description: 'select Companies',
required,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const companies = await CopperApiService.fetchCompanies(auth);
return {
options: companies.map((company: any) => ({
label: company.name,
value: company.id,
})),
};
} catch (e) {
console.error('Failed to fetch companies', e);
return {
options: [],
placeholder: 'Unable to load companies',
};
}
},
});
export const primaryContactsDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.Dropdown({
auth: CopperAuth,
displayName: 'Primary Contact',
description: 'select a primary contact',
required,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const primaryContacts = await CopperApiService.fetchPeople(auth);
return {
options: primaryContacts.map((contact: any) => ({
label: contact.name,
value: contact.id,
})),
};
} catch (e) {
console.error('Failed to fetch opportunities', e);
return {
options: [],
placeholder: 'Unable to load opportunities',
};
}
},
});
export const multiPrimaryContactsDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Primary Contacts',
description: 'select primary contacts',
required,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const primaryContacts = await CopperApiService.fetchPeople(auth);
return {
options: primaryContacts.map((contact: any) => ({
label: contact.name,
value: contact.id,
})),
};
} catch (e) {
console.error('Failed to fetch opportunities', e);
return {
options: [],
placeholder: 'Unable to load opportunities',
};
}
},
});
export const usersDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.Dropdown({
auth: CopperAuth,
displayName: 'Assignee',
description: 'select a user to assign to',
required,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const users = await CopperApiService.fetchUsers(auth);
return {
options: users.map((user: any) => ({
label: user.name,
value: user.id,
})),
};
} catch (e) {
console.error('Failed to fetch opportunities', e);
return {
options: [],
placeholder: 'Unable to load opportunities',
};
}
},
});
export const multiUsersDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Assignee',
description: 'select assignees',
required,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const users = await CopperApiService.fetchUsers(auth);
return {
options: users.map((user: any) => ({
label: user.name,
value: user.id,
})),
};
} catch (e) {
console.error('Failed to fetch opportunities', e);
return {
options: [],
placeholder: 'Unable to load opportunities',
};
}
},
});
export const opportunityDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.Dropdown({
auth: CopperAuth,
displayName: 'Opportunity',
description: 'select an Opportunity',
required,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const opportunities = await CopperApiService.fetchOpportunities(auth);
return {
options: opportunities.map((opportunity: any) => ({
label: opportunity.name,
value: JSON.stringify(opportunity),
})),
};
} catch (e) {
console.error('Failed to fetch opportunities', e);
return {
options: [],
placeholder: 'Unable to load opportunities',
};
}
},
});
export const multiOpportunityDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Opportunity',
description: 'select Opportunities',
required,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const opportunities = await CopperApiService.fetchOpportunities(auth);
return {
options: opportunities.map((opportunity: any) => ({
label: opportunity.name,
value: opportunity.id,
})),
};
} catch (e) {
console.error('Failed to fetch opportunities', e);
return {
options: [],
placeholder: 'Unable to load opportunities',
};
}
},
});
export const pipelinesDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.Dropdown({
auth: CopperAuth,
displayName: 'Pipeline',
description: 'select a Pipeline',
required,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const pipelines = await CopperApiService.fetchPipelines(auth);
return {
options: pipelines.map((pipeline: any) => ({
label: pipeline.name,
value: JSON.stringify(pipeline),
})),
};
} catch (e) {
console.error('Failed to fetch pipelines', e);
return {
options: [],
placeholder: 'Unable to load pipelines',
};
}
},
});
export const multiPipelinesDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Pipeline',
description: 'select a Pipeline',
required,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const pipelines = await CopperApiService.fetchPipelines(auth);
return {
options: pipelines.map((pipeline: any) => ({
label: pipeline.name,
value: JSON.stringify(pipeline),
})),
};
} catch (e) {
console.error('Failed to fetch pipelines', e);
return {
options: [],
placeholder: 'Unable to load pipelines',
};
}
},
});
export const projectsDropdown = ({
refreshers,
required = false,
}: {
refreshers: string[];
required?: boolean;
}) =>
Property.Dropdown({
auth: CopperAuth,
displayName: 'Project',
description: 'select a Project',
required,
refreshers,
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const projects = await CopperApiService.fetchProjects(auth);
return {
options: projects.map((project: any) => ({
label: project.name,
value: JSON.stringify(project),
})),
};
} catch (e) {
console.error('Failed to fetch projects', e);
return {
options: [],
placeholder: 'Unable to load projects',
};
}
},
});
export const ActivityTypesDropdown = (entity?: 'user' | 'system') =>
Property.Dropdown({
auth: CopperAuth,
displayName: 'Activity Type',
description: 'Select activity Type',
required: true,
refreshers: ['auth'],
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const response = await CopperApiService.fetchActivityTypes(auth);
const items =
entity && response[entity]
? response[entity]
: [...response.user, ...response.system];
return {
options: items.map((item: any) => ({
label: item.name,
value: JSON.stringify(item),
})),
};
} catch (e) {
console.error('Failed to fetch activity types', e);
return {
options: [],
placeholder: 'Unable to load activity types',
};
}
},
});
export const MultiActivityTypesDropdown = ({
entity,
required = false
}: {
entity?: 'user' | 'system';
required?: boolean;
}) =>
Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Activity Type',
description: 'Select activity Type',
required,
refreshers: ['auth'],
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const response = await CopperApiService.fetchActivityTypes(auth);
const items =
entity && response[entity]
? response[entity]
: [...response.user, ...response.system];
return {
options: items.map((item: any) => ({
label: item.name,
value: JSON.stringify(item),
})),
};
} catch (e) {
console.error('Failed to fetch activity types', e);
return {
options: [],
placeholder: 'Unable to load activity types',
};
}
},
});
export const MultiContactTypesDropdown = ({
required = false
}: {
required?: boolean;
}) =>
Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Contact Type',
description: 'Select contact Type',
required,
refreshers: ['auth'],
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const response = await CopperApiService.fetchContactTypes(auth);
return {
options: response.map((item: any) => ({
label: item.name,
value: item.id,
})),
};
} catch (e) {
console.error('Failed to fetch contact types', e);
return {
options: [],
placeholder: 'Unable to load contact types',
};
}
},
});
export const MultiLeadStatusDropdown = ({
required = false
}: {
required?: boolean;
}) =>
Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Lead Status',
description: 'Select lead status',
required,
refreshers: ['auth'],
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const response = await CopperApiService.fetchLeadStatuses(auth);
return {
options: response.map((item: any) => ({
label: item.name,
value: item.id,
})),
};
} catch (e) {
console.error('Failed to fetch lead statuses', e);
return {
options: [],
placeholder: 'Unable to load lead statuses',
};
}
},
});
export const MultiCustomerSourceDropdown = ({
required = false
}: {
required?: boolean;
}) =>
Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Customer Source',
description: 'Select customer source.',
required,
refreshers: ['auth'],
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const response = await CopperApiService.fetchCustomerSources(auth);
return {
options: response.map((item: any) => ({
label: item.name,
value: item.id,
})),
};
} catch (e) {
console.error('Failed to fetch customer sources', e);
return {
options: [],
placeholder: 'Unable to load customer sources',
};
}
},
});
export const MultiLossReasonsDropdown = ({
required = false
}: {
required?: boolean;
}) =>
Property.MultiSelectDropdown({
auth: CopperAuth,
displayName: 'Loss Reason',
description: 'Select loss reason.',
required,
refreshers: ['auth'],
async options({ auth }) {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Copper account first',
options: [],
};
}
try {
const response = await CopperApiService.fetchLossReasons(auth);
return {
options: response.map((item: any) => ({
label: item.name,
value: item.id,
})),
};
} catch (e) {
console.error('Failed to fetch loss reasons', e);
return {
options: [],
placeholder: 'Unable to load loss reasons',
};
}
},
});

View File

@@ -0,0 +1,269 @@
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
import { API_ENDPOINTS, BASE_URL, CopperAuthType } from './constants';
async function fireHttpRequest({
method,
path,
auth,
body,
}: {
method: HttpMethod;
path: string;
auth: CopperAuthType;
body?: any;
}) {
return await httpClient
.sendRequest({
method,
url: `${BASE_URL}${path}`,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
'X-PW-AccessToken': auth.props.apiKey,
'X-PW-Application': 'developer_api',
'X-PW-UserEmail': auth.props.email,
},
body,
})
.then((res) => res.body)
.catch((err) => {
throw err;
});
}
export const CopperApiService = {
async fetchCurrentUser(auth: CopperAuthType) {
return await fireHttpRequest({
method: HttpMethod.GET,
path: `/v1${API_ENDPOINTS.USERS}/me`,
auth,
});
},
async fetchLeads(auth: CopperAuthType, payload?: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.LEADS}/search`,
auth,
body: payload
});
},
async createTask(auth: CopperAuthType, payload: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.TASKS}`,
auth,
body: payload,
});
},
async createProject(auth: CopperAuthType, payload: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.PROJECTS}`,
auth,
body: payload,
});
},
async updateProject(auth: CopperAuthType, projectId: string, payload: any) {
return await fireHttpRequest({
method: HttpMethod.PUT,
path: `/v1${API_ENDPOINTS.PROJECTS}/${projectId}`,
auth,
body: payload,
});
},
async fetchProjects(auth: CopperAuthType, payload?: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.PROJECTS}/search`,
auth,
body: payload
});
},
async createCompany(auth: CopperAuthType, payload: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.COMPANIES}`,
auth,
body: payload,
});
},
async updateCompany(auth: CopperAuthType, companyId: string, payload: any) {
return await fireHttpRequest({
method: HttpMethod.PUT,
path: `/v1${API_ENDPOINTS.COMPANIES}/${companyId}`,
auth,
body: payload,
});
},
async fetchCompanies(auth: CopperAuthType, payload?: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.COMPANIES}/search`,
auth,
body: payload
});
},
async fetchActivityTypes(auth: CopperAuthType) {
return await fireHttpRequest({
method: HttpMethod.GET,
path: `/v1/activity_types`,
auth,
});
},
async fetchContactTypes(auth: CopperAuthType) {
return await fireHttpRequest({
method: HttpMethod.GET,
path: `/v1/contact_types`,
auth,
});
},
async fetchLeadStatuses(auth: CopperAuthType) {
return await fireHttpRequest({
method: HttpMethod.GET,
path: `/v1/lead_statuses`,
auth,
});
},
async fetchCustomerSources(auth: CopperAuthType) {
return await fireHttpRequest({
method: HttpMethod.GET,
path: `/v1/customer_sources`,
auth,
});
},
async fetchLossReasons(auth: CopperAuthType) {
return await fireHttpRequest({
method: HttpMethod.GET,
path: `/v1/loss_reasons`,
auth,
});
},
async createActivity(auth: CopperAuthType, payload: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1/activities`,
auth,
body: payload,
});
},
async fetchActivities(auth: CopperAuthType, payload: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1/activities/search`,
auth,
body: payload,
});
},
async createOpportunity(auth: CopperAuthType, payload: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.OPPORTUNITIES}`,
auth,
body: payload,
});
},
async updateOpportunity(
auth: CopperAuthType,
opportunityId: string,
payload: any
) {
return await fireHttpRequest({
method: HttpMethod.PUT,
path: `/v1${API_ENDPOINTS.OPPORTUNITIES}/${opportunityId}`,
auth,
body: payload,
});
},
async fetchOpportunities(auth: CopperAuthType, payload?: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.OPPORTUNITIES}/search`,
auth,
body: payload
});
},
async fetchTasks(auth: CopperAuthType) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.TASKS}/search`,
auth,
});
},
async fetchPipelines(auth: CopperAuthType) {
return await fireHttpRequest({
method: HttpMethod.GET,
path: `/v1${API_ENDPOINTS.PIPELINES}`,
auth,
});
},
async createLead(auth: CopperAuthType, payload: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.LEADS}`,
auth,
body: payload,
});
},
async updateLead(auth: CopperAuthType, leadId: string, payload: any) {
return await fireHttpRequest({
method: HttpMethod.PUT,
path: `/v1${API_ENDPOINTS.LEADS}/${leadId}`,
auth,
body: payload,
});
},
async convertLead(auth: CopperAuthType, leadId: string, payload: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.LEADS}/${leadId}/convert`,
auth,
body: payload,
});
},
async createPerson(auth: CopperAuthType, payload: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.PEOPLE}`,
auth,
body: payload,
});
},
async updatePerson(auth: CopperAuthType, personId: string, payload: any) {
return await fireHttpRequest({
method: HttpMethod.PUT,
path: `/v1${API_ENDPOINTS.PEOPLE}/${personId}`,
auth,
body: payload,
});
},
async fetchPeople(auth: CopperAuthType, payload?: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.PEOPLE}/search`,
auth,
body: payload
});
},
async fetchUsers(auth: CopperAuthType) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.USERS}/search`,
auth,
});
},
async createWebhook(auth: CopperAuthType, payload: any) {
return await fireHttpRequest({
method: HttpMethod.POST,
path: `/v1${API_ENDPOINTS.WEBHOOKS}`,
auth,
body: payload,
});
},
async deleteWebhook(auth: CopperAuthType, webhookId: string) {
return await fireHttpRequest({
method: HttpMethod.DELETE,
path: `/v1${API_ENDPOINTS.WEBHOOKS}/${webhookId}`,
auth,
});
},
};

View File

@@ -0,0 +1,77 @@
import {
createTrigger,
TriggerStrategy,
} from '@activepieces/pieces-framework';
import {
DedupeStrategy,
Polling,
pollingHelper,
} from '@activepieces/pieces-common';
import { CopperActivity, CopperAuth, CopperAuthType } from '../common/constants';
import { CopperApiService } from '../common/requests';
const polling: Polling<
CopperAuthType,
Record<string, never>
> = {
strategy: DedupeStrategy.TIMEBASED,
items: async ({ auth, lastFetchEpochMS }) => {
const minCreatedUnix =
lastFetchEpochMS != null
? Math.max(0, Math.floor(lastFetchEpochMS / 1000) - 1)
: undefined;
const collected: CopperActivity[] = [];
const pageSize = 100;
let page = 1;
let hasMore = true;
while (hasMore) {
const batch = await CopperApiService.fetchActivities(auth, {
minimum_activity_date: minCreatedUnix,
page_size: pageSize,
page_number: page,
});
if (!batch.length) break;
collected.push(...batch);
if (batch.length < pageSize) hasMore=false;
page += 1;
}
const out = collected.map((a) => ({
epochMilliSeconds: (a.activity_date ?? 0) * 1000,
data: a,
}));
out.sort((a, b) => a.epochMilliSeconds - b.epochMilliSeconds);
return out;
},
};
export const newActivity = createTrigger({
auth: CopperAuth,
name: 'newActivity',
displayName: 'New Activity',
description: 'Triggers when a new activity is logged',
props: {},
sampleData: {},
type: TriggerStrategy.POLLING,
async test(context) {
return await pollingHelper.test(polling, context);
},
async onEnable(context) {
const { store, auth, propsValue } = context;
await pollingHelper.onEnable(polling, { store, auth, propsValue });
},
async onDisable(context) {
const { store, auth, propsValue } = context;
await pollingHelper.onDisable(polling, { store, auth, propsValue });
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
});

View File

@@ -0,0 +1,41 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import { CopperApiService } from '../common/requests';
const CACHE_KEY = 'copper_new_lead_trigger_key';
export const newLead = createTrigger({
auth: CopperAuth,
name: 'newLead',
displayName: 'New Lead',
description: 'Triggers when a new lead is created.',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const response = await CopperApiService.createWebhook(context.auth, {
target: context.webhookUrl,
type: 'lead',
event: 'new',
});
await context.store.put(CACHE_KEY, {
webhookId: response.id,
});
},
async onDisable(context) {
const cachedWebhookData = (await context.store.get(CACHE_KEY)) as any;
if (cachedWebhookData) {
await CopperApiService.deleteWebhook(
context.auth,
cachedWebhookData.webhookId
).then(async () => {
await context.store.delete(CACHE_KEY);
});
}
},
async run(context) {
return [context.payload.body];
},
});

View File

@@ -0,0 +1,41 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import { CopperApiService } from '../common/requests';
const CACHE_KEY = 'copper_new_person_trigger_key';
export const newPerson = createTrigger({
auth: CopperAuth,
name: 'newPerson',
displayName: 'New Person',
description: 'Triggers when a new person/contact is created.',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const response = await CopperApiService.createWebhook(context.auth, {
target: context.webhookUrl,
type: 'person',
event: 'new',
});
await context.store.put(CACHE_KEY, {
webhookId: response.id,
});
},
async onDisable(context) {
const cachedWebhookData = (await context.store.get(CACHE_KEY)) as any;
if (cachedWebhookData) {
await CopperApiService.deleteWebhook(
context.auth,
cachedWebhookData.webhookId
).then(async () => {
await context.store.delete(CACHE_KEY);
});
}
},
async run(context) {
return [context.payload.body];
},
});

View File

@@ -0,0 +1,41 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import { CopperApiService } from '../common/requests';
const CACHE_KEY = 'copper_new_task_trigger_key';
export const newTask = createTrigger({
auth: CopperAuth,
name: 'newTask',
displayName: 'New Task',
description: 'Triggers when a new task is created.',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const response = await CopperApiService.createWebhook(context.auth, {
target: context.webhookUrl,
type: 'task',
event: 'new',
});
await context.store.put(CACHE_KEY, {
webhookId: response.id,
});
},
async onDisable(context) {
const cachedWebhookData = (await context.store.get(CACHE_KEY)) as any;
if (cachedWebhookData) {
await CopperApiService.deleteWebhook(
context.auth,
cachedWebhookData.webhookId
).then(async () => {
await context.store.delete(CACHE_KEY);
});
}
},
async run(context) {
return [context.payload.body];
},
});

View File

@@ -0,0 +1,64 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import { CopperApiService } from '../common/requests';
const CACHE_KEY = 'copper_updated_lead_status_trigger_key';
export const updatedLeadStatus = createTrigger({
auth: CopperAuth,
name: 'updatedLeadStatus',
displayName: 'Updated Lead Status',
description: 'Triggers when the status of a lead changes.',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const response = await CopperApiService.createWebhook(context.auth, {
target: context.webhookUrl,
type: 'lead',
event: 'update',
});
await context.store.put(CACHE_KEY, {
webhookId: response.id,
});
},
async onDisable(context) {
const cachedWebhookData = (await context.store.get(CACHE_KEY)) as any;
if (cachedWebhookData) {
await CopperApiService.deleteWebhook(
context.auth,
cachedWebhookData.webhookId
).then(async () => {
await context.store.delete(CACHE_KEY);
});
}
},
async run(context) {
const body = context.payload.body as any;
const ids = Array.isArray(body?.ids) ? body.ids : [];
const updatedAttrs = body?.updated_attributes ?? {};
const statusChanged =
Array.isArray(updatedAttrs.status) &&
updatedAttrs.status.length === 2 &&
updatedAttrs.status[0] !== updatedAttrs.status[1];
if (!statusChanged) {
return [];
}
const events = ids.map((id: number | string) => ({
id,
change_type: 'status_change',
previous_status: updatedAttrs.status?.[0] ?? null,
current_status: updatedAttrs.status?.[1] ?? null,
subscription_id: body.subscription_id,
timestamp: body.timestamp,
}));
return events;
},
})

View File

@@ -0,0 +1,41 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { CopperApiService } from '../common/requests';
import { CopperAuth } from '../common/constants';
const CACHE_KEY = 'copper_updated_lead_trigger_key';
export const updatedLead = createTrigger({
auth: CopperAuth,
name: 'updatedLead',
displayName: 'Updated Lead',
description: 'Triggers when a lead is modified.',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const response = await CopperApiService.createWebhook(context.auth, {
target: context.webhookUrl,
type: 'lead',
event: 'update',
});
await context.store.put(CACHE_KEY, {
webhookId: response.id,
});
},
async onDisable(context) {
const cachedWebhookData = (await context.store.get(CACHE_KEY)) as any;
if (cachedWebhookData) {
await CopperApiService.deleteWebhook(
context.auth,
cachedWebhookData.webhookId
).then(async () => {
await context.store.delete(CACHE_KEY);
});
}
},
async run(context) {
return [context.payload.body];
},
});

View File

@@ -0,0 +1,72 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { CopperApiService } from '../common/requests';
import { CopperAuth } from '../common/constants';
const CACHE_KEY = 'copper_updated_opportunity_stage_trigger_key';
export const updatedOpportunityStage = createTrigger({
auth: CopperAuth,
name: 'updatedOpportunityStage',
displayName: 'Updated Opportunity Stage',
description: 'Triggers when an opportunity stage changes',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const response = await CopperApiService.createWebhook(context.auth, {
target: context.webhookUrl,
type: 'opportunity',
event: 'update',
});
await context.store.put(CACHE_KEY, {
webhookId: response.id,
});
},
async onDisable(context) {
const cachedWebhookData = (await context.store.get(CACHE_KEY)) as any;
if (cachedWebhookData) {
await CopperApiService.deleteWebhook(
context.auth,
cachedWebhookData.webhookId
).then(async () => {
await context.store.delete(CACHE_KEY);
});
}
},
async run(context) {
const body = context.payload.body as any;
const ids = Array.isArray(body.ids) ? body.ids : [];
const updatedAttrs = body.updated_attributes;
const idChanged =
Array.isArray(updatedAttrs.stage_id) &&
updatedAttrs.stage_id[0] !== updatedAttrs.stage_id[1];
const labelChanged =
Array.isArray(updatedAttrs.stage) &&
updatedAttrs.stage[0] !== updatedAttrs.stage[1];
const isStageMove = idChanged && labelChanged;
if (!isStageMove) {
return [];
}
const events = ids.map((id: any) => ({
id,
change_type: 'stage_change',
previous_stage_id: updatedAttrs.stage_id?.[0] ?? null,
current_stage_id: updatedAttrs.stage_id?.[1] ?? null,
previous_stage_label: updatedAttrs.stage?.[0] ?? null,
current_stage_label: updatedAttrs.stage?.[1] ?? null,
previous_last_stage_at: updatedAttrs.last_stage_at?.[0] ?? null,
current_last_stage_at: updatedAttrs.last_stage_at?.[1] ?? null,
previous_days_in_stage: updatedAttrs.days_in_stage?.[0] ?? null,
current_days_in_stage: updatedAttrs.days_in_stage?.[1] ?? null,
subscription_id: body.subscription_id,
timestamp: body.timestamp,
}));
return events;
},
});

View File

@@ -0,0 +1,63 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { CopperApiService } from '../common/requests';
import { CopperAuth } from '../common/constants';
const CACHE_KEY = 'copper_updated_opportunity_status_trigger_key';
export const updatedOpportunityStatus = createTrigger({
auth: CopperAuth,
name: 'updatedOpportunityStatus',
displayName: 'Updated Opportunity Status',
description: "Triggers when an opportunity's status changes.",
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const response = await CopperApiService.createWebhook(context.auth, {
target: context.webhookUrl,
type: 'opportunity',
event: 'update',
});
await context.store.put(CACHE_KEY, {
webhookId: response.id,
});
},
async onDisable(context) {
const cachedWebhookData = (await context.store.get(CACHE_KEY)) as any;
if (cachedWebhookData) {
await CopperApiService.deleteWebhook(
context.auth,
cachedWebhookData.webhookId
).then(async () => {
await context.store.delete(CACHE_KEY);
});
}
},
async run(context) {
const body = context.payload.body as any;
const ids = Array.isArray(body?.ids) ? body.ids : [];
const updatedAttrs = body?.updated_attributes ?? {};
const statusChanged =
Array.isArray(updatedAttrs.status) &&
updatedAttrs.status.length === 2 &&
updatedAttrs.status[0] !== updatedAttrs.status[1];
if (!statusChanged) {
return [];
}
const events = ids.map((id: number | string) => ({
id,
change_type: 'status_change',
previous_status: updatedAttrs.status?.[0] ?? null,
current_status: updatedAttrs.status?.[1] ?? null,
subscription_id: body.subscription_id,
timestamp: body.timestamp,
}));
return events;
},
});

View File

@@ -0,0 +1,41 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import { CopperApiService } from '../common/requests';
const CACHE_KEY = 'copper_updated_opportunity_trigger_key';
export const updatedOpportunity = createTrigger({
auth: CopperAuth,
name: 'updatedOpportunity',
displayName: 'Updated Opportunity',
description: 'Triggers when an opportunity changes.',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const response = await CopperApiService.createWebhook(context.auth, {
target: context.webhookUrl,
type: 'opportunity',
event: 'update',
});
await context.store.put(CACHE_KEY, {
webhookId: response.id,
});
},
async onDisable(context) {
const cachedWebhookData = (await context.store.get(CACHE_KEY)) as any;
if (cachedWebhookData) {
await CopperApiService.deleteWebhook(
context.auth,
cachedWebhookData.webhookId
).then(async () => {
await context.store.delete(CACHE_KEY);
});
}
},
async run(context) {
return [context.payload.body];
},
});

View File

@@ -0,0 +1,41 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { CopperAuth } from '../common/constants';
import { CopperApiService } from '../common/requests';
const CACHE_KEY = 'copper_updated_project_trigger_key';
export const updatedProject = createTrigger({
auth: CopperAuth,
name: 'updatedProject',
displayName: 'Updated Project',
description: 'Triggers when a project is updated.',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const response = await CopperApiService.createWebhook(context.auth, {
target: context.webhookUrl,
type: 'project',
event: 'update',
});
await context.store.put(CACHE_KEY, {
webhookId: response.id,
});
},
async onDisable(context) {
const cachedWebhookData = (await context.store.get(CACHE_KEY)) as any;
if (cachedWebhookData) {
await CopperApiService.deleteWebhook(
context.auth,
cachedWebhookData.webhookId
).then(async () => {
await context.store.delete(CACHE_KEY);
});
}
},
async run(context) {
return [context.payload.body];
},
});

View File

@@ -0,0 +1,41 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { CopperApiService } from '../common/requests';
import { CopperAuth } from '../common/constants';
const CACHE_KEY = 'copper_updated_task_trigger_key';
export const updatedTask = createTrigger({
auth: CopperAuth,
name: 'updatedTask',
displayName: 'Updated Task',
description: 'Triggers when a task is updated.',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const response = await CopperApiService.createWebhook(context.auth, {
target: context.webhookUrl,
type: 'task',
event: 'update',
});
await context.store.put(CACHE_KEY, {
webhookId: response.id,
});
},
async onDisable(context) {
const cachedWebhookData = (await context.store.get(CACHE_KEY)) as any;
if (cachedWebhookData) {
await CopperApiService.deleteWebhook(
context.auth,
cachedWebhookData.webhookId
).then(async () => {
await context.store.delete(CACHE_KEY);
});
}
},
async run(context) {
return [context.payload.body];
},
});