{
  "info": {
    "name": "Holded — mcp.ai",
    "description": "REST API for the Holded MCP. Set {{apiKey}} to a workspace key (sk_live_…) created at https://mcp.ai/settings/api-keys.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.mcp.ai/api/holded",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "sk_live_...",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "holded_create_contact",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/contact",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "contact"
          ]
        },
        "description": "Create a customer, supplier, lead, debtor, creditor, or unclassified contact and return its new Holded ID.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"name\": \"\",\n  \"email\": \"\",\n  \"phone\": \"\",\n  \"mobile\": \"\",\n  \"tax_id\": \"\",\n  \"website\": \"\",\n  \"is_person\": false,\n  \"trade_name\": \"\",\n  \"vat_number\": \"\",\n  \"contact_type\": \"\",\n  \"billing_address\": {}\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "holded_create_invoice",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/invoice",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "invoice"
          ]
        },
        "description": "Create a sales invoice for an existing contact and return its ID; this does not send, approve, or record payment for the invoice.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"body\": \"\",\n  \"tags\": \"\",\n  \"items\": \"\",\n  \"notes\": \"\",\n  \"currency\": \"\",\n  \"discount\": 0,\n  \"due_date\": \"\",\n  \"language\": \"\",\n  \"contact_id\": \"\",\n  \"issue_date\": \"\",\n  \"description\": \"\",\n  \"currency_change\": 0,\n  \"sales_channel_id\": \"\",\n  \"numbering_series_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "holded_delete_contact",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/contact",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "contact"
          ]
        },
        "description": "Permanently delete one contact by ID; linked documents keep display text but lose the live contact association.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"contact_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "holded_delete_invoice",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/invoice",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "invoice"
          ]
        },
        "description": "Permanently delete one invoice and its recorded payments; its document number is not reused.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"invoice_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "holded_find_contacts",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/find/contacts",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "find",
            "contacts"
          ]
        },
        "description": "Find Holded contacts by name prefix or an exact email, phone, mobile, tax ID, or external ID. With no filter, return one page of contacts.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"name\": \"\",\n  \"email\": \"\",\n  \"limit\": 0,\n  \"phone\": \"\",\n  \"cursor\": \"\",\n  \"mobile\": \"\",\n  \"tax_id\": \"\",\n  \"external_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "holded_find_invoices",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/find/invoices",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "find",
            "invoices"
          ]
        },
        "description": "Find Holded invoices by fuzzy document-number prefix or list them by contact, payment status, issue date, or due date. With no filter, return one page of invoices.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"sort\": \"\",\n  \"limit\": 0,\n  \"cursor\": \"\",\n  \"status\": \"\",\n  \"contact_id\": \"\",\n  \"due_date_end\": \"\",\n  \"due_date_start\": \"\",\n  \"issue_date_end\": \"\",\n  \"document_number\": \"\",\n  \"issue_date_start\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "holded_get_contact",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/contact",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "contact"
          ]
        },
        "description": "Return the complete profile of one contact by its Holded contact ID.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"contact_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "holded_get_invoice",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/invoice",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "invoice"
          ]
        },
        "description": "Return full details, lines, totals, and payment summary for one invoice by its Holded ID.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"invoice_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "holded_update_contact",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/update/contact",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "update",
            "contact"
          ]
        },
        "description": "Safely change selected fields on a contact without clearing unspecified profile data. Reads the contact before updating and returns the verified result.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"changes\": {},\n  \"contact_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "holded_update_invoice",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/update/invoice",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "update",
            "invoice"
          ]
        },
        "description": "Safely change selected mutable fields on an invoice without clearing unspecified invoice data or altering recorded payments. Reads the invoice before updating and returns the verified result.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"changes\": {},\n  \"invoice_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    }
  ]
}