{
  "service": "holded",
  "displayName": "Holded",
  "categories": [
    "Finance",
    "Productivity"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Token",
      "placeholder": "HOLDED_API_TOKEN",
      "description": "Holded API token used as a Bearer token."
    }
  ],
  "homepageUrl": "https://www.holded.com",
  "actions": [
    {
      "id": "holded.create_contact",
      "service": "holded",
      "name": "create_contact",
      "description": "Create a basic Holded contact with JSON-friendly identity fields.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "The contact name."
          },
          "email": {
            "type": "string",
            "description": "The contact email address.",
            "format": "email"
          },
          "phone": {
            "type": "string",
            "minLength": 1,
            "description": "The contact phone number."
          },
          "mobile": {
            "type": "string",
            "minLength": 1,
            "description": "The contact mobile number."
          },
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "The contact tax identification code."
          },
          "customId": {
            "type": "string",
            "minLength": 1,
            "description": "External custom identifier for the contact."
          },
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Holded contact type value."
          }
        },
        "additionalProperties": false,
        "required": [
          "name"
        ],
        "description": "The input payload for creating a Holded contact."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "The Holded contact identifier."
              },
              "name": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact name when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact email address when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "phone": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact phone number when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "mobile": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact mobile number when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "code": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact tax identification code when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "customId": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The external custom identifier when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "type": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact type when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw object returned by Holded."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Holded contact."
          },
          "raw": {
            "description": "The raw top-level payload returned by Holded."
          }
        },
        "additionalProperties": false,
        "required": [
          "contact",
          "raw"
        ],
        "description": "The response returned when creating a Holded contact."
      }
    },
    {
      "id": "holded.get_contact",
      "service": "holded",
      "name": "get_contact",
      "description": "Get a Holded contact by identifier.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "contactId": {
            "type": "string",
            "minLength": 1,
            "description": "Holded object identifier."
          }
        },
        "additionalProperties": false,
        "required": [
          "contactId"
        ],
        "description": "The input payload for getting a Holded contact."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "The Holded contact identifier."
              },
              "name": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact name when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact email address when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "phone": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact phone number when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "mobile": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact mobile number when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "code": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact tax identification code when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "customId": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The external custom identifier when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "type": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact type when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw object returned by Holded."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Holded contact."
          },
          "raw": {
            "description": "The raw top-level payload returned by Holded."
          }
        },
        "additionalProperties": false,
        "required": [
          "contact",
          "raw"
        ],
        "description": "The response returned when getting a Holded contact."
      }
    },
    {
      "id": "holded.get_product",
      "service": "holded",
      "name": "get_product",
      "description": "Get a Holded product by identifier.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string",
            "minLength": 1,
            "description": "Holded object identifier."
          }
        },
        "additionalProperties": false,
        "required": [
          "productId"
        ],
        "description": "The input payload for getting a Holded product."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "product": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "The Holded product identifier."
              },
              "name": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product name when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "sku": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product SKU when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product description when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "price": {
                "anyOf": [
                  {
                    "type": "number",
                    "description": "The product price when returned by Holded."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw object returned by Holded."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Holded product."
          },
          "raw": {
            "description": "The raw top-level payload returned by Holded."
          }
        },
        "additionalProperties": false,
        "required": [
          "product",
          "raw"
        ],
        "description": "The response returned when getting a Holded product."
      }
    },
    {
      "id": "holded.list_contacts",
      "service": "holded",
      "name": "list_contacts",
      "description": "List Holded contacts with exact-match filters and cursor pagination.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "phone": {
            "type": "string",
            "minLength": 1,
            "description": "Filter contacts by exact phone number."
          },
          "mobile": {
            "type": "string",
            "minLength": 1,
            "description": "Filter contacts by exact mobile number."
          },
          "email": {
            "type": "string",
            "description": "Filter contacts by exact email address.",
            "format": "email"
          },
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Filter contacts by exact tax identification code."
          },
          "customId": {
            "type": "string",
            "minLength": 1,
            "description": "Filter contacts by exact external custom identifier."
          },
          "cursor": {
            "type": "string",
            "minLength": 1,
            "description": "Opaque pagination cursor returned by Holded in the previous response."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Maximum number of records to return. Holded accepts up to 100."
          }
        },
        "additionalProperties": false,
        "description": "The input payload for listing Holded contacts."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "contacts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "The Holded contact identifier."
                },
                "name": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact name when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "email": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact email address when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "phone": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact phone number when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "mobile": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact mobile number when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "code": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact tax identification code when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "customId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The external custom identifier when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "type": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact type when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw object returned by Holded."
                }
              },
              "additionalProperties": false,
              "description": "A normalized Holded contact."
            },
            "description": "The contacts returned by Holded."
          },
          "pagination": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "nextCursor": {
                    "anyOf": [
                      {
                        "type": "string",
                        "description": "Cursor for the next page when Holded reports that another page is available."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "hasMore": {
                    "anyOf": [
                      {
                        "type": "boolean",
                        "description": "Whether Holded reports that another page is available."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "raw": {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The raw pagination metadata returned by Holded."
                  }
                },
                "additionalProperties": false,
                "description": "Pagination metadata returned by Holded."
              },
              {
                "type": "null"
              }
            ]
          },
          "raw": {
            "description": "The raw top-level payload returned by Holded."
          }
        },
        "additionalProperties": false,
        "required": [
          "contacts",
          "pagination",
          "raw"
        ],
        "description": "The response returned when listing Holded contacts."
      }
    },
    {
      "id": "holded.list_products",
      "service": "holded",
      "name": "list_products",
      "description": "List Holded products with cursor pagination.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "cursor": {
            "type": "string",
            "minLength": 1,
            "description": "Opaque pagination cursor returned by Holded in the previous response."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Maximum number of records to return. Holded accepts up to 100."
          }
        },
        "additionalProperties": false,
        "description": "The input payload for listing Holded products."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "The Holded product identifier."
                },
                "name": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The product name when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "sku": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The product SKU when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The product description when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "price": {
                  "anyOf": [
                    {
                      "type": "number",
                      "description": "The product price when returned by Holded."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw object returned by Holded."
                }
              },
              "additionalProperties": false,
              "description": "A normalized Holded product."
            },
            "description": "The products returned by Holded."
          },
          "pagination": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "nextCursor": {
                    "anyOf": [
                      {
                        "type": "string",
                        "description": "Cursor for the next page when Holded reports that another page is available."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "hasMore": {
                    "anyOf": [
                      {
                        "type": "boolean",
                        "description": "Whether Holded reports that another page is available."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "raw": {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The raw pagination metadata returned by Holded."
                  }
                },
                "additionalProperties": false,
                "description": "Pagination metadata returned by Holded."
              },
              {
                "type": "null"
              }
            ]
          },
          "raw": {
            "description": "The raw top-level payload returned by Holded."
          }
        },
        "additionalProperties": false,
        "required": [
          "products",
          "pagination",
          "raw"
        ],
        "description": "The response returned when listing Holded products."
      }
    }
  ]
}
