GenLogs Mismatch alerts API

The Mismatch alerts API from GenLogs — 2 operation(s) for mismatch alerts.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

genlogs-mismatch-alerts-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: GenLogs Alerts Mismatch alerts API
  version: 1.0.0
  description: 'GenLogs Truck Intelligence API. Ground-truth motor-carrier and shipper data from a nationwide roadside sensor network: carrier recommendations by lane, carrier and FMCSA profiles, carrier vetting, shipper lanes and facilities, onboarded-carrier contact management, mismatch observations, and alert webhooks. Base URL https://api.genlogs.io. Authentication uses an x-api-key header plus a short-lived Access-Token obtained from /auth/token; endpoint access is gated by named permissions.'
  contact:
    name: GenLogs
    url: https://docs.genlogs.io
    email: contact@genlogs.io
  x-provenance:
    method: searched
    source: https://docs.genlogs.io (per-endpoint embedded OpenAPI fragments + documented endpoints)
    assembled: '2026-07-19'
    operationIds: some operationIds normalized by API Evangelist where the provider fragments omitted them
servers:
- url: https://api.genlogs.io
  description: GenLogs Truck Intelligence API
security:
- ApiKeyAuth: []
  AccessToken: []
tags:
- name: Mismatch alerts
paths:
  /mismatch-observations:
    post:
      summary: Create mismatch observation alerts
      description: 'Creates one alert row per standalone USDOT or MC value, and one combined row per item in `pairs`. At least one of `usdots`, `mcs`, or `pairs` must be non-empty. `alert_name` is optional; when omitted or blank, stored as null. `logos` is optional and, when present, is normalized to lowercase, stored in `logos`, and used by mismatch detection. Logo matching remains case-insensitive. Unknown JSON properties are rejected.

        '
      tags:
      - Mismatch alerts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalMismatchObservationsRequest'
      responses:
        '201':
          description: Mismatch alerts created successfully.
          content:
            application/json:
              schema:
                type: object
                required:
                - message
                - data
                properties:
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      created:
                        type: integer
                        description: Number of alerts inserted.
        '400':
          description: Bad request – validation error or empty usdots/mcs/pairs.
        '401':
          description: Unauthorized – Invalid or missing Access-Token.
        '403':
          description: Forbidden – missing permission.
        '500':
          description: Internal Server Error.
      operationId: createMismatchObservation
    get:
      summary: List mismatch observations
      description: 'Returns mismatch observations for the authenticated customer only, ordered from newest to oldest. Paginated; default page size is 50. Returns 200 with an empty `mismatch_observations` array when none exist.

        '
      tags:
      - Mismatch alerts
      parameters:
      - name: page
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          default: 1
        description: Page number (1-based).
      - name: page_size
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 500
          default: 50
        description: Number of items per page (max 500).
      responses:
        '200':
          description: Paginated list of mismatch observations for the customer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MismatchObservationsListResponse'
        '401':
          description: Unauthorized – Invalid or missing Access-Token.
        '403':
          description: Forbidden – missing permission.
      operationId: listMismatchObservations
  /mismatch-observations/{observation_id}:
    patch:
      summary: Update a mismatch observation
      description: 'Partial update of USDOT (`usdot`), MC (`mc`), `logos`, display name (`alert_name`), and/or `is_disabled`. Send at least one field. Requires permission `external-api-mismatch-observations` or admin. Only alerts belonging to the JWT `customer_id` can be updated; otherwise 403. `logos` values are normalized to lowercase before persistence and response. Logo matching remains case-insensitive. Returns the full updated observation (same shape as list items).

        '
      tags:
      - Mismatch alerts
      parameters:
      - name: observation_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: Mismatch observation (alert) identifier.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MismatchObservationPatchRequest'
      responses:
        '200':
          description: Full updated mismatch observation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MismatchObservationItem'
        '400':
          description: 'Bad request – empty body, no updatable fields, invalid USDOT/MC, or validation error.

            '
        '401':
          description: Unauthorized – Invalid or missing Access-Token.
        '403':
          description: Forbidden – missing permission, or observation belongs to another customer.
        '404':
          description: Mismatch observation not found or deleted.
      operationId: updateMismatchObservation
    delete:
      summary: Delete a mismatch observation
      description: 'Permanently removes the row (timestamp hard delete). This is separate from `is_disabled`, which only pauses processing. After delete, the observation no longer appears in GET list and cannot be PATCHed. Same permission as create/list/update. Returns 404 if the id is unknown, belongs to another customer, or is already deleted. Returns 404 if the id is unknown, belongs to another customer, or is already deleted.

        '
      tags:
      - Mismatch alerts
      parameters:
      - name: observation_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '204':
          description: Observation deleted successfully (no response body).
        '401':
          description: Unauthorized – Invalid or missing Access-Token.
        '403':
          description: Forbidden – missing permission.
        '404':
          description: Not found, wrong customer, or already deleted.
      operationId: deleteMismatchObservation
components:
  schemas:
    MismatchObservationItem:
      type: object
      required:
      - id
      - usdot
      - mc
      - is_disabled
      properties:
        id:
          type: string
          format: uuid
          description: Alert row identifier.
        alert_name:
          type: string
          nullable: true
          description: Optional display name; may be null if not set.
        usdot:
          type: string
          nullable: true
          description: USDOT value from stored criteria.
        mc:
          type: string
          nullable: true
          description: MC value from stored criteria.
        logos:
          type: array
          items:
            type: string
          description: Trailer logos from `logos`, returned in normalized lowercase format. Empty when not configured.
          default: []
        is_disabled:
          type: boolean
          description: Whether this mismatch observation alert is disabled.
        created_at:
          type: string
          format: date-time
          nullable: true
          description: Creation timestamp when available.
        last_run_at:
          type: string
          format: date-time
          nullable: true
          description: Last run timestamp in ISO-8601 format; null when not run yet.
    MismatchObservationPatchRequest:
      type: object
      additionalProperties: false
      description: 'At least one property must be present (after applying ignore rules). Omitted fields are left unchanged. Empty string or whitespace-only `usdot` / `mc` values are ignored (they do not clear the field). JSON `null` for `usdot` / `mc` still clears that side of the criteria when present. USDOT/MC validation matches create rules (numeric after normalization).

        '
      properties:
        usdot:
          type: string
          nullable: true
          description: New USDOT value; null clears when paired with MC update rules.
        mc:
          type: string
          nullable: true
          description: New MC value; null clears when paired with USDOT update rules.
        logos:
          type: array
          nullable: true
          items:
            type: string
          description: 'Trailer logos list. Values are trimmed, deduplicated, and stored/returned in lowercase format. Matching against the logos catalog.

            '
        alert_name:
          type: string
          nullable: true
          description: Display name; blank or whitespace-only is stored as null.
        is_disabled:
          type: boolean
          description: Whether the observation is disabled.
    ExternalMismatchObservationsRequest:
      type: object
      additionalProperties: false
      properties:
        usdots:
          type: array
          items:
            type: string
          description: USDOT numbers (strings). Each non-empty entry creates one alert.
          default: []
        mcs:
          type: array
          items:
            type: string
          description: MC numbers (strings). Each non-empty entry creates one alert.
          default: []
        pairs:
          type: array
          items:
            $ref: '#/components/schemas/MismatchObservationPairRequest'
          description: 'Paired MC/USDOT identifiers. Each item creates one combined alert row with both MC and USDOT in the stored criteria.

            '
          default: []
        logos:
          type: array
          nullable: true
          items:
            type: string
          description: 'Optional trailer logos list. Each value must be a non-empty string. Values are trimmed, deduplicated, and stored in lowercase format. Matching against the logos catalog.

            '
        alert_name:
          type: string
          nullable: true
          description: Optional display name; omitted or whitespace-only is stored as null.
    MismatchObservationsListResponse:
      type: object
      required:
      - mismatch_observations
      - page
      - page_size
      - total
      properties:
        mismatch_observations:
          type: array
          items:
            $ref: '#/components/schemas/MismatchObservationItem'
        page:
          type: integer
          minimum: 1
          description: Current page number.
        page_size:
          type: integer
          minimum: 1
          maximum: 500
          description: Page size used for this response.
        total:
          type: integer
          minimum: 0
          description: Total number of observations for this customer (all pages).
    MismatchObservationPairRequest:
      type: object
      additionalProperties: false
      required:
      - mc
      - usdot
      properties:
        mc:
          type: string
          minLength: 1
          description: MC number for the combined alert row.
        usdot:
          type: string
          minLength: 1
          description: USDOT number for the combined alert row.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key provided by GenLogs. Required on every request.
    AccessToken:
      type: apiKey
      in: header
      name: Access-Token
      description: Short-lived access token obtained from POST /auth/token (or refreshed via /auth/token/refresh).