Joblogic Jobs API

Work orders and their costs.

OpenAPI Specification

joblogic-jobs-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Joblogic Assets Jobs API
  description: 'The Joblogic API is the REST interface to the Joblogic cloud field service management (FSM) platform, covering customers, contacts, sites, assets, jobs, engineer visits, engineers, quotes, and invoices for trades, service, and maintenance contractors. All resource paths sit under `/api/v1`.


    Access model: Joblogic API access is customer-provisioned and gated. A caller is issued a Client ID, Client Secret, and Tenant ID by Joblogic, and the caller''s public IP addresses are allowlisted behind Joblogic''s firewall before requests are accepted. Integrations are first developed against a per-customer UAT sandbox (web app at https://uat.joblogic.com, API host https://uatapi.joblogic.com) and then promoted to production.


    Authentication: Each request must carry a Bearer access token obtained from the Joblogic IdentityServer token endpoint using the OAuth2 client-credentials grant (client_id, client_secret, grant_type, scope). Access tokens expire after one hour; expired or missing tokens return 401 Unauthorized.


    Multi-tenancy: Most operations require a `tenantId` (the caller''s Joblogic tenant, a GUID) supplied as a query parameter.


    Modeling note: This document is modeled by API Evangelist from Joblogic''s published Postman documentation at https://apidocs.joblogic.com/. Endpoint paths, methods, and the auth flow are confirmed from that collection. Request and response schemas are representative - the live API is IP-allowlisted, so payload bodies could not be exercised directly and are illustrative rather than exhaustive.'
  version: v1
  contact:
    name: Joblogic Support
    url: https://support.joblogic.com/docs/api-access
    email: support@joblogic.com
servers:
- url: https://api.joblogic.com/api/v1
  description: Production API host (live; firewall / IP-allowlisted, customer-provisioned). The exact production host is confirmed to callers during onboarding.
- url: https://uatapi.joblogic.com/api/v1
  description: UAT sandbox API host used for integration development.
security:
- oauth2ClientCredentials: []
tags:
- name: Jobs
  description: Work orders and their costs.
paths:
  /Job/getall:
    post:
      operationId: searchJobs
      tags:
      - Jobs
      summary: Search jobs
      description: Searches jobs by conditions such as keyword, status, dates, and tags.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: A page of matching jobs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /Job:
    get:
      operationId: getJobByUniqueId
      tags:
      - Jobs
      summary: Retrieve a job by unique ID
      parameters:
      - $ref: '#/components/parameters/UniqueId'
      - $ref: '#/components/parameters/TenantId'
      - $ref: '#/components/parameters/IncludeAdditionalDetails'
      responses:
        '200':
          description: The requested job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      operationId: createJob
      tags:
      - Jobs
      summary: Create a job
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Job'
      responses:
        '200':
          description: The created job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
    put:
      operationId: updateJob
      tags:
      - Jobs
      summary: Update a job
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Job'
      responses:
        '200':
          description: The updated job.
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deleteJob
      tags:
      - Jobs
      summary: Delete a job
      parameters:
      - $ref: '#/components/parameters/UniqueId'
      - $ref: '#/components/parameters/TenantId'
      responses:
        '200':
          description: Deletion confirmation.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /Job/GetById:
    get:
      operationId: getJobById
      tags:
      - Jobs
      summary: Get job details by integer ID
      parameters:
      - $ref: '#/components/parameters/IntId'
      - $ref: '#/components/parameters/TenantId'
      responses:
        '200':
          description: The requested job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /Job/updatestatus:
    put:
      operationId: updateJobStatus
      tags:
      - Jobs
      summary: Update job status
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetStatusRequest'
      responses:
        '200':
          description: Job status updated.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /JobCost:
    get:
      operationId: getJobCosts
      tags:
      - Jobs
      summary: Get all costs for a job
      parameters:
      - $ref: '#/components/parameters/TenantId'
      - name: jobId
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: The job's costs.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/JobCost'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /JobCost/Labour:
    post:
      operationId: createLabourCost
      tags:
      - Jobs
      summary: Add a labour cost to a job
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JobCost'
      responses:
        '200':
          description: The created labour cost.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /JobCost/Material:
    post:
      operationId: createMaterialCost
      tags:
      - Jobs
      summary: Add a material cost to a job
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JobCost'
      responses:
        '200':
          description: The created material cost.
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  responses:
    ValidationError:
      description: The request payload failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing, invalid, or expired access token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Rate limit exceeded. Joblogic resource servers limit callers (by default up to 100 requests per minute) and respond with 429.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    JobList:
      $ref: '#/components/schemas/PagedResult'
    Error:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
        details:
          type: object
          additionalProperties: true
    Job:
      type: object
      properties:
        id:
          type: string
          format: uuid
        jobNumber:
          type: string
        description:
          type: string
        status:
          type: string
        jobType:
          type: string
        jobCategory:
          type: string
        customerId:
          type: string
          format: uuid
        siteId:
          type: string
          format: uuid
        priorityLevel:
          type: string
        dateLogged:
          type: string
          format: date-time
        targetCompletionDate:
          type: string
          format: date-time
        tags:
          type: array
          items:
            type: string
    SearchRequest:
      type: object
      description: Common search envelope used by the /GetAll and /getall endpoints. Fields shown are representative; consult the live documentation for the exact filters supported per resource.
      properties:
        tenantId:
          type: string
          format: uuid
        searchTerm:
          type: string
        tags:
          type: array
          items:
            type: string
        activeStatus:
          type: string
          enum:
          - active
          - inactive
          - all
        pageNumber:
          type: integer
          default: 1
        pageSize:
          type: integer
          default: 50
    PagedResult:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            additionalProperties: true
        pageNumber:
          type: integer
        pageSize:
          type: integer
        totalCount:
          type: integer
    SetStatusRequest:
      type: object
      properties:
        id:
          type: string
        tenantId:
          type: string
          format: uuid
        status:
          type: string
    JobCost:
      type: object
      description: A cost line recorded against a job (labour, material, travel, mileage, overtime, expense, subcontractor, SOR item, callout, or other).
      properties:
        id:
          type: string
          format: uuid
        jobId:
          type: string
          format: uuid
        type:
          type: string
        description:
          type: string
        quantity:
          type: number
        unitCost:
          type: number
        total:
          type: number
  parameters:
    TenantId:
      name: tenantId
      in: query
      required: true
      description: The caller's Joblogic tenant identifier (GUID).
      schema:
        type: string
        format: uuid
    UniqueId:
      name: id
      in: query
      required: true
      description: The resource's unique identifier (GUID).
      schema:
        type: string
        format: uuid
    IncludeAdditionalDetails:
      name: includeAdditionalDetails
      in: query
      required: false
      description: When true, expands nested/related detail in the response.
      schema:
        type: boolean
        default: false
    IntId:
      name: id
      in: query
      required: true
      description: The resource's integer identifier.
      schema:
        type: integer
        format: int64
  securitySchemes:
    oauth2ClientCredentials:
      type: oauth2
      description: 'OAuth2 client-credentials grant against the Joblogic IdentityServer. The confirmed UAT token endpoint is https://uatidentityserver.joblogic.com/connect/token; the production IdentityServer token endpoint is provided to callers during onboarding. Send client_id, client_secret, grant_type=client_credentials, and the issued scope, then pass the returned access token as `Authorization: Bearer <access_token>`. Tokens expire after one hour.'
      flows:
        clientCredentials:
          tokenUrl: https://uatidentityserver.joblogic.com/connect/token
          scopes: {}