{
  "service": "front",
  "displayName": "Front",
  "categories": [
    "Communication",
    "Productivity"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Token",
      "placeholder": "Bearer token",
      "description": "Front Core API token sent as a Bearer token. Create or view tokens in Settings > Developers > API Tokens, or see https://dev.frontapp.com/docs/create-and-revoke-api-tokens."
    }
  ],
  "homepageUrl": "https://front.com",
  "actions": [
    {
      "id": "front.create_contact",
      "service": "front",
      "name": "create_contact",
      "description": "Create a Front company contact with JSON fields and one or more reachable handles.",
      "requiredScopes": [],
      "providerPermissions": [
        "contacts:write"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "handles": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "handle": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The handle value, such as an email address or phone number."
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "twitter",
                    "email",
                    "phone",
                    "facebook",
                    "intercom",
                    "front_chat",
                    "custom"
                  ],
                  "description": "The Front contact handle source."
                }
              },
              "additionalProperties": false,
              "required": [
                "handle",
                "source"
              ],
              "description": "A handle with which a Front contact can be reached."
            },
            "description": "Handles with which the contact is reachable.",
            "minItems": 1
          },
          "contact": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "description": "Contact name."
              },
              "description": {
                "type": "string",
                "minLength": 1,
                "description": "Contact description."
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "description": "A contact link URL."
                },
                "description": "Links associated with the contact."
              },
              "listNames": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "description": "A contact list name."
                },
                "description": "Contact list names the contact belongs to. Front creates missing lists automatically."
              },
              "customFields": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "Custom fields keyed by the custom field name configured in Front."
              }
            },
            "additionalProperties": false,
            "description": "JSON fields accepted by Front for contact create and update requests."
          }
        },
        "additionalProperties": false,
        "required": [
          "handles",
          "contact"
        ],
        "description": "Input for creating a Front company contact."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Unique identifier of the contact."
              },
              "name": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Contact name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Contact description."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "avatarUrl": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "URL of the contact avatar when Front returns one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "string",
                  "description": "A contact link URL."
                },
                "description": "Links associated with the contact."
              },
              "lists": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Unique identifier of the contact list."
                    },
                    "name": {
                      "type": "string",
                      "description": "Name of the contact list."
                    },
                    "isPrivate": {
                      "type": "boolean",
                      "description": "Whether the contact list is private."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "name",
                    "isPrivate"
                  ],
                  "description": "A Front contact list summary."
                },
                "description": "Contact lists that contain the contact."
              },
              "handles": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "handle": {
                      "type": "string",
                      "minLength": 1,
                      "description": "The handle value, such as an email address or phone number."
                    },
                    "source": {
                      "type": "string",
                      "enum": [
                        "twitter",
                        "email",
                        "phone",
                        "facebook",
                        "intercom",
                        "front_chat",
                        "custom"
                      ],
                      "description": "The Front contact handle source."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "handle",
                    "source"
                  ],
                  "description": "A handle with which a Front contact can be reached."
                },
                "description": "Handles with which the contact is reachable."
              },
              "customFields": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "Custom fields keyed by the custom field name configured in Front."
              },
              "isPrivate": {
                "type": "boolean",
                "description": "Whether the contact is private."
              }
            },
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "description",
              "avatarUrl",
              "links",
              "lists",
              "handles",
              "isPrivate"
            ],
            "description": "A normalized Front contact."
          }
        },
        "additionalProperties": false,
        "required": [
          "contact"
        ],
        "description": "The Front contact created by the API."
      }
    },
    {
      "id": "front.get_contact",
      "service": "front",
      "name": "get_contact",
      "description": "Fetch one Front contact by contact ID or documented resource alias.",
      "requiredScopes": [],
      "providerPermissions": [
        "contacts:read"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "contactId": {
            "type": "string",
            "minLength": 1,
            "description": "The Front contact ID, or a documented resource alias such as source:handle."
          }
        },
        "additionalProperties": false,
        "required": [
          "contactId"
        ],
        "description": "Input for fetching one Front contact."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Unique identifier of the contact."
              },
              "name": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Contact name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Contact description."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "avatarUrl": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "URL of the contact avatar when Front returns one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "string",
                  "description": "A contact link URL."
                },
                "description": "Links associated with the contact."
              },
              "lists": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Unique identifier of the contact list."
                    },
                    "name": {
                      "type": "string",
                      "description": "Name of the contact list."
                    },
                    "isPrivate": {
                      "type": "boolean",
                      "description": "Whether the contact list is private."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "name",
                    "isPrivate"
                  ],
                  "description": "A Front contact list summary."
                },
                "description": "Contact lists that contain the contact."
              },
              "handles": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "handle": {
                      "type": "string",
                      "minLength": 1,
                      "description": "The handle value, such as an email address or phone number."
                    },
                    "source": {
                      "type": "string",
                      "enum": [
                        "twitter",
                        "email",
                        "phone",
                        "facebook",
                        "intercom",
                        "front_chat",
                        "custom"
                      ],
                      "description": "The Front contact handle source."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "handle",
                    "source"
                  ],
                  "description": "A handle with which a Front contact can be reached."
                },
                "description": "Handles with which the contact is reachable."
              },
              "customFields": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "Custom fields keyed by the custom field name configured in Front."
              },
              "isPrivate": {
                "type": "boolean",
                "description": "Whether the contact is private."
              }
            },
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "description",
              "avatarUrl",
              "links",
              "lists",
              "handles",
              "isPrivate"
            ],
            "description": "A normalized Front contact."
          }
        },
        "additionalProperties": false,
        "required": [
          "contact"
        ],
        "description": "The Front contact response."
      }
    },
    {
      "id": "front.list_contacts",
      "service": "front",
      "name": "list_contacts",
      "description": "List Front company contacts with optional cursor pagination and sorting.",
      "requiredScopes": [],
      "providerPermissions": [
        "contacts:read"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 1,
            "description": "Optional Front contact query object string for updated_after and updated_before filters."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Maximum number of contacts per page."
          },
          "pageToken": {
            "type": "string",
            "minLength": 1,
            "description": "Front page token returned by a previous list_contacts call."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "created_at",
              "updated_at"
            ],
            "description": "Field used to sort contacts."
          },
          "sortOrder": {
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "description": "Order by which contacts should be sorted."
          }
        },
        "additionalProperties": false,
        "description": "Input for listing Front contacts."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "contacts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Unique identifier of the contact."
                },
                "name": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "Contact name."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "Contact description."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "URL of the contact avatar when Front returns one."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "links": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "A contact link URL."
                  },
                  "description": "Links associated with the contact."
                },
                "lists": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Unique identifier of the contact list."
                      },
                      "name": {
                        "type": "string",
                        "description": "Name of the contact list."
                      },
                      "isPrivate": {
                        "type": "boolean",
                        "description": "Whether the contact list is private."
                      }
                    },
                    "additionalProperties": false,
                    "required": [
                      "id",
                      "name",
                      "isPrivate"
                    ],
                    "description": "A Front contact list summary."
                  },
                  "description": "Contact lists that contain the contact."
                },
                "handles": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "handle": {
                        "type": "string",
                        "minLength": 1,
                        "description": "The handle value, such as an email address or phone number."
                      },
                      "source": {
                        "type": "string",
                        "enum": [
                          "twitter",
                          "email",
                          "phone",
                          "facebook",
                          "intercom",
                          "front_chat",
                          "custom"
                        ],
                        "description": "The Front contact handle source."
                      }
                    },
                    "additionalProperties": false,
                    "required": [
                      "handle",
                      "source"
                    ],
                    "description": "A handle with which a Front contact can be reached."
                  },
                  "description": "Handles with which the contact is reachable."
                },
                "customFields": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "Custom fields keyed by the custom field name configured in Front."
                },
                "isPrivate": {
                  "type": "boolean",
                  "description": "Whether the contact is private."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "description",
                "avatarUrl",
                "links",
                "lists",
                "handles",
                "isPrivate"
              ],
              "description": "A normalized Front contact."
            },
            "description": "Contacts returned by Front."
          },
          "pagination": {
            "type": "object",
            "properties": {
              "next": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Link to the next page of results when Front returns one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "nextPageToken": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Token extracted from the next page link for the next connector call."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "required": [
              "next",
              "nextPageToken"
            ],
            "description": "Front cursor pagination metadata."
          }
        },
        "additionalProperties": false,
        "required": [
          "contacts",
          "pagination"
        ],
        "description": "The Front contacts page."
      }
    },
    {
      "id": "front.list_teammates",
      "service": "front",
      "name": "list_teammates",
      "description": "List Front teammates in the company.",
      "requiredScopes": [],
      "providerPermissions": [
        "teammates:read"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "description": "Input for listing Front teammates."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "teammates": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Unique identifier of the teammate."
                },
                "email": {
                  "type": "string",
                  "description": "Email address of the teammate."
                },
                "username": {
                  "type": "string",
                  "description": "Username of the teammate."
                },
                "firstName": {
                  "type": "string",
                  "description": "First name of the teammate."
                },
                "lastName": {
                  "type": "string",
                  "description": "Last name of the teammate."
                },
                "isAdmin": {
                  "type": "boolean",
                  "description": "Whether the teammate is a company admin."
                },
                "isAvailable": {
                  "type": "boolean",
                  "description": "Whether the teammate is available."
                },
                "isBlocked": {
                  "type": "boolean",
                  "description": "Whether the teammate account has been blocked."
                },
                "type": {
                  "type": "string",
                  "description": "Type of teammate returned by Front."
                },
                "customFields": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "Custom fields keyed by the custom field name configured in Front."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "email",
                "username",
                "firstName",
                "lastName",
                "isAdmin",
                "isAvailable",
                "isBlocked",
                "type"
              ],
              "description": "A normalized Front teammate."
            },
            "description": "Teammates returned by Front."
          }
        },
        "additionalProperties": false,
        "required": [
          "teammates"
        ],
        "description": "The Front teammates response."
      }
    },
    {
      "id": "front.update_contact",
      "service": "front",
      "name": "update_contact",
      "description": "Update JSON fields on a Front contact. Avatar uploads are intentionally not exposed.",
      "requiredScopes": [],
      "providerPermissions": [
        "contacts:write"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "contactId": {
            "type": "string",
            "minLength": 1,
            "description": "The Front contact ID, or a documented resource alias such as source:handle."
          },
          "contact": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "description": "Contact name."
              },
              "description": {
                "type": "string",
                "minLength": 1,
                "description": "Contact description."
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "description": "A contact link URL."
                },
                "description": "Links associated with the contact."
              },
              "listNames": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "description": "A contact list name."
                },
                "description": "Contact list names the contact belongs to. Front creates missing lists automatically."
              },
              "customFields": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "Custom fields keyed by the custom field name configured in Front."
              }
            },
            "additionalProperties": false,
            "description": "JSON fields accepted by Front for contact create and update requests."
          }
        },
        "additionalProperties": false,
        "required": [
          "contactId",
          "contact"
        ],
        "description": "Input for updating a Front contact."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Whether Front accepted the update request."
          }
        },
        "additionalProperties": false,
        "required": [
          "success"
        ],
        "description": "The result of updating a Front contact."
      }
    }
  ]
}
