{
  "info": {
    "name": "Service Fusion Open API",
    "description": "REST/JSON interface to Service Fusion field service management software. Base URL: https://api.servicefusion.com/v1. Authenticate with OAuth 2.0 - obtain an access token from https://api.servicefusion.com/oauth/access_token (authorization_code or client_credentials grant) and send it as a Bearer token. API access requires the Pro plan and is rate limited to ~60 requests/minute. The public API is read-and-create oriented (list, retrieve, create). Customers, jobs, estimates, invoices, and techs are documented resources; contacts, products, services, payments, and calendar tasks are modeled from the Service Fusion data model - verify against https://docs.servicefusion.com/.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      { "key": "token", "value": "{{accessToken}}", "type": "string" }
    ]
  },
  "variable": [
    { "key": "baseUrl", "value": "https://api.servicefusion.com/v1", "type": "string" },
    { "key": "accessToken", "value": "", "type": "string" }
  ],
  "item": [
    {
      "name": "Customers",
      "item": [
        {
          "name": "List customers",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/customers?sort=customer_name&page=1&per-page=25", "host": ["{{baseUrl}}"], "path": ["customers"], "query": [{ "key": "sort", "value": "customer_name" }, { "key": "page", "value": "1" }, { "key": "per-page", "value": "25" }] },
            "description": "Lists customer accounts with filtering, sorting, and pagination."
          }
        },
        {
          "name": "Create a customer",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"customer_name\": \"Acme Property Management\",\n  \"phones\": [{ \"phone\": \"555-123-4567\", \"type\": \"office\" }],\n  \"emails\": [\"billing@acme.example\"]\n}" },
            "url": { "raw": "{{baseUrl}}/customers", "host": ["{{baseUrl}}"], "path": ["customers"] },
            "description": "Creates a new customer account."
          }
        },
        {
          "name": "Retrieve a customer",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/customers/:id", "host": ["{{baseUrl}}"], "path": ["customers", ":id"], "variable": [{ "key": "id", "value": "" }] },
            "description": "Retrieves a single customer by ID."
          }
        }
      ]
    },
    {
      "name": "Contacts",
      "item": [
        {
          "name": "List a customer's contacts",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/customers/:id/contacts", "host": ["{{baseUrl}}"], "path": ["customers", ":id", "contacts"], "variable": [{ "key": "id", "value": "" }] },
            "description": "Lists contacts and service locations for a customer."
          }
        },
        {
          "name": "Add a contact to a customer",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"fname\": \"Jordan\",\n  \"lname\": \"Rivera\",\n  \"contact_type\": \"site\",\n  \"phone\": \"555-987-6543\",\n  \"email\": \"jordan@acme.example\"\n}" },
            "url": { "raw": "{{baseUrl}}/customers/:id/contacts", "host": ["{{baseUrl}}"], "path": ["customers", ":id", "contacts"], "variable": [{ "key": "id", "value": "" }] },
            "description": "Creates a contact under the given customer account."
          }
        }
      ]
    },
    {
      "name": "Jobs",
      "item": [
        {
          "name": "List jobs",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/jobs?sort=-start_date&page=1&per-page=25", "host": ["{{baseUrl}}"], "path": ["jobs"], "query": [{ "key": "sort", "value": "-start_date" }, { "key": "page", "value": "1" }, { "key": "per-page", "value": "25" }] },
            "description": "Lists jobs. Always pass a sort parameter - unsorted /jobs list queries are known to hang."
          }
        },
        {
          "name": "Create a job",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"customer_name\": \"Acme Property Management\",\n  \"description\": \"HVAC maintenance visit\",\n  \"category\": \"Maintenance\",\n  \"start_date\": \"2026-07-10T09:00:00Z\"\n}" },
            "url": { "raw": "{{baseUrl}}/jobs", "host": ["{{baseUrl}}"], "path": ["jobs"] },
            "description": "Creates a new job (work order)."
          }
        },
        {
          "name": "Retrieve a job",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/jobs/:id", "host": ["{{baseUrl}}"], "path": ["jobs", ":id"], "variable": [{ "key": "id", "value": "" }] },
            "description": "Retrieves a single job by ID."
          }
        }
      ]
    },
    {
      "name": "Estimates",
      "item": [
        {
          "name": "List estimates",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/estimates?page=1&per-page=25", "host": ["{{baseUrl}}"], "path": ["estimates"], "query": [{ "key": "page", "value": "1" }, { "key": "per-page", "value": "25" }] },
            "description": "Lists estimates (quotes)."
          }
        },
        {
          "name": "Create an estimate",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"customer_name\": \"Acme Property Management\",\n  \"line_items\": [{ \"name\": \"Diagnostic\", \"quantity\": 1, \"unit_price\": 95 }]\n}" },
            "url": { "raw": "{{baseUrl}}/estimates", "host": ["{{baseUrl}}"], "path": ["estimates"] },
            "description": "Creates a new estimate with line items."
          }
        }
      ]
    },
    {
      "name": "Invoices",
      "item": [
        {
          "name": "List invoices",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/invoices?filters[status]=open&page=1&per-page=25", "host": ["{{baseUrl}}"], "path": ["invoices"], "query": [{ "key": "filters[status]", "value": "open" }, { "key": "page", "value": "1" }, { "key": "per-page", "value": "25" }] },
            "description": "Lists invoices; filter by status=open for outstanding accounts receivable."
          }
        },
        {
          "name": "Create an invoice",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"customer_name\": \"Acme Property Management\",\n  \"line_items\": [{ \"name\": \"Labor\", \"quantity\": 2, \"unit_price\": 120 }]\n}" },
            "url": { "raw": "{{baseUrl}}/invoices", "host": ["{{baseUrl}}"], "path": ["invoices"] },
            "description": "Creates a new invoice."
          }
        }
      ]
    },
    {
      "name": "Products and Services",
      "item": [
        {
          "name": "List products",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/products?page=1&per-page=25", "host": ["{{baseUrl}}"], "path": ["products"], "query": [{ "key": "page", "value": "1" }, { "key": "per-page", "value": "25" }] },
            "description": "Lists catalog products (parts and inventory items)."
          }
        },
        {
          "name": "List services",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/services?page=1&per-page=25", "host": ["{{baseUrl}}"], "path": ["services"], "query": [{ "key": "page", "value": "1" }, { "key": "per-page", "value": "25" }] },
            "description": "Lists catalog services (labor and flat-rate tasks)."
          }
        }
      ]
    },
    {
      "name": "Payments",
      "item": [
        {
          "name": "List payments",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/payments?page=1&per-page=25", "host": ["{{baseUrl}}"], "path": ["payments"], "query": [{ "key": "page", "value": "1" }, { "key": "per-page", "value": "25" }] },
            "description": "Lists payments recorded against invoices."
          }
        },
        {
          "name": "Record a payment",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"invoice_id\": \"\",\n  \"amount\": 240,\n  \"method\": \"card\",\n  \"date\": \"2026-07-11\"\n}" },
            "url": { "raw": "{{baseUrl}}/payments", "host": ["{{baseUrl}}"], "path": ["payments"] },
            "description": "Records a payment applied to an invoice."
          }
        }
      ]
    },
    {
      "name": "Techs and Users",
      "item": [
        {
          "name": "List techs and users",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/techs?page=1&per-page=25", "host": ["{{baseUrl}}"], "path": ["techs"], "query": [{ "key": "page", "value": "1" }, { "key": "per-page", "value": "25" }] },
            "description": "Lists the technicians and users in the account."
          }
        },
        {
          "name": "Retrieve a tech",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/techs/:id", "host": ["{{baseUrl}}"], "path": ["techs", ":id"], "variable": [{ "key": "id", "value": "" }] },
            "description": "Retrieves a single technician or user by ID."
          }
        }
      ]
    },
    {
      "name": "Calendar Tasks",
      "item": [
        {
          "name": "List calendar tasks",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/calendar-tasks?page=1&per-page=25", "host": ["{{baseUrl}}"], "path": ["calendar-tasks"], "query": [{ "key": "page", "value": "1" }, { "key": "per-page", "value": "25" }] },
            "description": "Lists non-job calendar tasks such as reminders and follow-ups."
          }
        },
        {
          "name": "Create a calendar task",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"title\": \"Follow up on estimate\",\n  \"start_date\": \"2026-07-12T13:00:00Z\",\n  \"assigned_to\": \"\"\n}" },
            "url": { "raw": "{{baseUrl}}/calendar-tasks", "host": ["{{baseUrl}}"], "path": ["calendar-tasks"] },
            "description": "Creates a new calendar task."
          }
        }
      ]
    }
  ]
}
