tread.io MaterialRates API

The MaterialRates API from tread.io — 5 operation(s) for materialrates.

OpenAPI Specification

treadio-materialrates-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Horizon API V1 AccountExternalTruckIdentifier MaterialRates API
  version: '1.0'
  contact:
    name: Tread
    url: https://tread.io
    email: developers@tread.io
  description: 'This is the Version 1 implementation.


    When in doubt we default to the practices outlined [here](https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#advanced-queries)'
  license:
    name: Private
    url: https://tread.io
servers:
- description: production
  url: https://api.tread-horizon.com
security:
- bearerAuth: []
tags:
- name: MaterialRates
paths:
  /v1/companies/{company-id}/material_rates:
    parameters:
    - schema:
        type: string
        format: uuid
      name: company-id
      in: path
      required: true
      description: Company ID
    - $ref: '#/components/parameters/Accept-Language'
    post:
      summary: Create a MaterialRate within a Company context
      tags:
      - MaterialRates
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    $ref: '#/components/schemas/MaterialRate-Read'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
        '415':
          $ref: '#/components/responses/Error'
        '422':
          $ref: '#/components/responses/ModelError'
      operationId: post-v1-companies-company-id-material_rates
      description: 'Create a `MaterialRate` within a specific `Company` context.


        This endpoint requires the `create_material_rate` permission.'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaterialRate-Create'
    get:
      summary: Retrieve MaterialRates that belong to a Company
      tags:
      - MaterialRates
      responses:
        '200':
          description: OK
          headers:
            Link:
              schema:
                type: string
              description: Contains prev and next links for pagination
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    type: array
                    x-stoplight:
                      id: n3g0iyrcw3cxs
                    items:
                      $ref: '#/components/schemas/MaterialRate-Read'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-companies-company-id-material_rates
      x-stoplight:
        id: km4orqg4khs32
      description: 'Retrieve `MaterialRates` for a `Company`.


        - When retrieving `Company`-default `MaterialRates`, use `filter[default_only]=true`.

        - When retrieving `Customer Account`-specific `MaterialRates`, use `filter[customer_account_id]=customer_account_uuid`.'
      parameters:
      - $ref: '#/components/parameters/page-limit'
      - $ref: '#/components/parameters/page-after'
      - $ref: '#/components/parameters/page-before'
      - $ref: '#/components/parameters/filter-customer_account_id'
      - $ref: '#/components/parameters/filter-default_only'
      - $ref: '#/components/parameters/filter-material_ids'
      - $ref: '#/components/parameters/filter-project_ids'
      - $ref: '#/components/parameters/filter-site_ids'
  /v1/companies/{company-id}/material_rates/typeahead:
    parameters:
    - schema:
        type: string
        format: uuid
      name: company-id
      in: path
      required: true
      description: Company ID
    - $ref: '#/components/parameters/Accept-Language'
    get:
      summary: Typeahead search on MaterialRates for a Company
      tags:
      - MaterialRates
      responses:
        '200':
          description: OK
          headers:
            Link:
              schema:
                type: string
              description: Contains prev and next links for pagination
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    type: array
                    x-stoplight:
                      id: 5abtl41lpwhjr
                    items:
                      $ref: '#/components/schemas/MaterialRate-Read-Typeahead'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-companies-company-id-material_rates-typeahead
      x-stoplight:
        id: fbdn0euda5mbc
      x-internal: true
      description: '`search[site][query]` is a typeahead against the `MaterialRate`''s `Site`''s `name`'
      parameters:
      - $ref: '#/components/parameters/page-limit'
      - $ref: '#/components/parameters/page-after'
      - $ref: '#/components/parameters/page-before'
      - $ref: '#/components/parameters/search-site-query'
      - $ref: '#/components/parameters/filter-customer_account_id'
      - $ref: '#/components/parameters/filter-project_id'
      - $ref: '#/components/parameters/filter-material_id'
      - $ref: '#/components/parameters/filter-site_id'
  /v1/material_rates:
    parameters:
    - $ref: '#/components/parameters/Accept-Language'
    post:
      summary: Create a MaterialRate
      tags:
      - MaterialRates
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    $ref: '#/components/schemas/MaterialRate-Read'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
        '415':
          $ref: '#/components/responses/Error'
        '422':
          $ref: '#/components/responses/ModelError'
      operationId: post-v1-material_rates
      x-stoplight:
        id: jca6qthq49z0o
      description: 'Create a `MaterialRate`.


        This endpoint requires the `create_material_rate` permission.'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaterialRate-Create'
  /v1/material_rates/{id}:
    parameters:
    - schema:
        type: string
        format: uuid
      name: id
      in: path
      required: true
      description: MaterialRate ID
    - $ref: '#/components/parameters/Accept-Language'
    get:
      summary: Retrieve a single MaterialRate
      tags:
      - MaterialRates
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    $ref: '#/components/schemas/MaterialRate-Read'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-material_rates-id
      x-stoplight:
        id: ehe1z9phshp18
      description: Retrieve a `MaterialRate` by ID.
    patch:
      summary: Update a MaterialRate
      tags:
      - MaterialRates
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    $ref: '#/components/schemas/MaterialRate-Read'
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
        '415':
          $ref: '#/components/responses/Error'
        '422':
          $ref: '#/components/responses/ModelError'
      operationId: patch-v1-material_rates-id
      x-stoplight:
        id: xg0rca5uv71ia
      description: 'Update a `MaterialRate` by ID.


        This endpoint requires the `edit_material_rate` permission.'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaterialRate-Update'
    delete:
      summary: Delete a MaterialRate
      tags:
      - MaterialRates
      responses:
        '204':
          description: No Content
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
        '422':
          $ref: '#/components/responses/ModelError'
      operationId: delete-v1-material_rates-id
      x-stoplight:
        id: rj8qvz9fhm7jr
      description: 'Delete a `MaterialRate` by ID.


        This endpoint requires the `edit_material_rate` permission.'
  /v1/projects/{project-id}/material_rates:
    parameters:
    - schema:
        type: string
        format: uuid
      name: project-id
      in: path
      required: true
      description: Project ID
    - $ref: '#/components/parameters/Accept-Language'
    get:
      summary: Retrieve MaterialRates of a Project
      tags:
      - MaterialRates
      responses:
        '200':
          description: OK
          headers:
            Link:
              schema:
                type: string
              description: Contains prev and next links for pagination
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    type: array
                    x-stoplight:
                      id: 887nads4836tt
                    items:
                      $ref: '#/components/schemas/MaterialRate-Read'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-projects-project-id-material_rates
      x-stoplight:
        id: qvi8fjfhnaos4
      description: Retrieve `MaterialRates` of a `Project`.
      x-internal: false
      parameters:
      - $ref: '#/components/parameters/page-limit'
      - $ref: '#/components/parameters/page-after'
      - $ref: '#/components/parameters/page-before'
components:
  responses:
    ModelError:
      description: ''
      content:
        application/json:
          schema:
            type: object
            $ref: '#/components/schemas/ModelError-Response'
    Error:
      description: Error response
      content:
        application/json:
          schema:
            type: object
            $ref: '#/components/schemas/Error-Response'
    UnauthenticatedError:
      description: Example response
      content:
        application/json:
          schema:
            type: object
            $ref: '#/components/schemas/UnauthenticatedError-Response'
  schemas:
    MaterialRate-Read:
      title: MaterialRate-Read
      x-stoplight:
        id: dovckk0ttfvcr
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - type: object
        required:
        - buy_price
        - sell_price
        - unit_of_measure
        - material
        - company
        properties:
          buy_price:
            type: string
            x-stoplight:
              id: 2qho4z34qhk0l
            nullable: true
          sell_price:
            type: string
            x-stoplight:
              id: l3zcrql2c3o8j
            nullable: true
          unit_of_measure:
            $ref: '#/components/schemas/OrderUnitOfMeasure'
          material:
            $ref: '#/components/schemas/Material-Read-Nested'
          project:
            $ref: '#/components/schemas/Project-Read-Nested'
          site:
            $ref: '#/components/schemas/Site-Read-Nested'
          customer_account:
            $ref: '#/components/schemas/Account-Read-Nested'
          company:
            $ref: '#/components/schemas/Company-Read-Nested'
      - $ref: '#/components/schemas/Timestamps'
    CompanyShare-Read-Nested:
      title: CompanyShare-Read-Nested
      x-stoplight:
        id: makajouqsb7jq
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - type: object
        x-stoplight:
          id: s6h0nfzt2fjry
        required:
        - external_id
        - ticket_match_id
        - sender_company
        - dispatchable
        - schedule_on
        - rate_override
        - expires_at
        properties:
          external_id:
            type: string
            x-stoplight:
              id: c9ls3nrhbih3v
            nullable: true
          ticket_match_id:
            type: string
            x-stoplight:
              id: a1cd3nrhbih3v
            nullable: true
          sender_company:
            $ref: '#/components/schemas/Company-Read-Nested'
          dispatchable:
            type: boolean
            x-stoplight:
              id: kd884ihz6qi6w
          schedule_on:
            type: boolean
            x-stoplight:
              id: kd884ihz61234
          rate_override:
            type: boolean
            x-stoplight:
              id: mq4osazzielxo
          expires_at:
            type: string
            x-stoplight:
              id: aaa111jpq0ga9
            format: date-time
            description: ISO8601 timestamp with local timezone
            nullable: true
    Error-Response:
      title: Error-Response
      x-stoplight:
        id: 52cydhphee3qe
      type: object
      required:
      - error
      properties:
        error:
          $ref: '#/components/schemas/Error'
      additionalProperties: false
    GeofenceType:
      title: GeofenceType
      x-stoplight:
        id: geahowr9r8ly1
      nullable: true
      enum:
      - moving
      - circle
      - polygon
      readOnly: true
    AccountType:
      title: AccountType
      x-stoplight:
        id: i4vfmd4rwrq8p
      enum:
      - customer
      - vendor
      example: customer
    NextBillionGeofence-Read:
      title: NextBillionGeofence-Read
      x-stoplight:
        id: 60y0z4bb3pu6m
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - $ref: '#/components/schemas/Geofence-Data'
    TreadId:
      title: TreadId
      x-stoplight:
        id: 43k4t5tl359m4
      type: object
      required:
      - tread_id
      properties:
        tread_id:
          type: string
          x-stoplight:
            id: zi3ld7djflw6f
          pattern: ^[0-9A-F]{6}$
          minLength: 6
          maxLength: 6
          example: ABC123
          description: Tread ID
      additionalProperties: false
    Discardable:
      title: Discardable
      x-stoplight:
        id: 46axlb8u5wjay
      type: object
      required:
      - discarded_at
      properties:
        discarded_at:
          type: string
          x-stoplight:
            id: cy8t6fecoyxbo
          format: date-time
          nullable: true
      additionalProperties: false
    Site-Read-Typeahead:
      title: Site-Read-Typeahead
      x-stoplight:
        id: wnzkdq5df4apa
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - type: object
        required:
        - name
        - external_id
        properties:
          name:
            type: string
            description: Site name
          company_share:
            $ref: '#/components/schemas/CompanyShare-Read-Nested'
          external_id:
            type: string
            x-stoplight:
              id: tt6lx8lw29aiu
            nullable: true
    GeofenceTag:
      title: GeofenceTag
      x-stoplight:
        id: anytkmb3ydi6c
      enum:
      - scaling
      - site
      - loading
      - unloading
      - check_in
      - ticketing
    Material-Read-Typeahead:
      title: Material-Read-Typeahead
      x-stoplight:
        id: 30glh3las0ydb
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - type: object
        required:
        - name
        - external_id
        properties:
          name:
            type: string
            description: Material name
          external_id:
            type: string
            description: Material external_id
            x-stoplight:
              id: ml0l0yvuz5u6d
            nullable: true
    Account-Read-Typeahead:
      title: Account-Read-Typeahead
      x-stoplight:
        id: 0jtlv216ot4og
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - type: object
        x-stoplight:
          id: zinx4pmrlrvkg
        required:
        - name
        - schedule_on
        properties:
          name:
            type: string
            x-stoplight:
              id: 675oqyzkv2xvp
            description: Account name
          connected_company:
            type: object
            x-stoplight:
              id: 9e36j656fhsso
            required:
            - id
            properties:
              id:
                type: string
                x-stoplight:
                  id: 8nxy7z0w3h51m
                format: uuid
          schedule_on:
            type: boolean
            x-stoplight:
              id: 4yv7e5z57qmn2
      x-internal: true
    Address-Read-Nested:
      title: Address-Read-Nested
      x-stoplight:
        id: cvym2dzuo375q
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - $ref: '#/components/schemas/Address-Read'
    Error:
      title: Error
      x-stoplight:
        id: 3g57kkik3l464
      type: object
      description: An Error.
      required:
      - code
      properties:
        code:
          type: string
          x-stoplight:
            id: 7o9x1t8v0bgfo
      additionalProperties: false
    Project-Read-Nested:
      title: Project-Read-Nested
      x-stoplight:
        id: 9ene929zmvaog
      allOf:
      - $ref: '#/components/schemas/Project-Read-Typeahead'
      - type: object
        x-stoplight:
          id: 8t1ly6sefwmit
        required:
        - po_job_number
        - internal_notes
        - job_notes
        - notes
        - order_notes
        properties:
          po_job_number:
            type: string
            x-stoplight:
              id: w5ajmms5o1rjq
            nullable: true
          internal_notes:
            type: string
            x-stoplight:
              id: 3hbaltdu1u159
            nullable: true
          job_notes:
            type: string
            x-stoplight:
              id: fupx5op0cmel2
            nullable: true
          notes:
            type: string
            x-stoplight:
              id: 96qr64lmtj36s
            nullable: true
          order_notes:
            type: string
            x-stoplight:
              id: o38gpshallijh
            nullable: true
    ModelError-Item:
      title: ModelError-Item
      x-stoplight:
        id: b93chwval2t8d
      type: object
      required:
      - model
      - field
      - message
      properties:
        model:
          type: string
          x-stoplight:
            id: 30myfyjkno8ao
          description: The Model associated with this Error
        field:
          type: string
          x-stoplight:
            id: 8gl4ed3uxhdws
          description: The field associated with this Error
        message:
          type: string
          x-stoplight:
            id: bmgbrtmw17qsj
          description: The Error message
      additionalProperties: false
    UnauthenticatedError:
      title: UnauthenticatedError
      x-stoplight:
        id: 202o69l0fs40h
      allOf:
      - $ref: '#/components/schemas/Error'
      - type: object
        x-stoplight:
          id: tg10dt7s0l6bw
        properties:
          error_type:
            type: string
            x-stoplight:
              id: wvq8c0qsym4hz
        required:
        - error_type
    ModelError:
      title: ModelError
      x-stoplight:
        id: nhp6714o4j1qt
      description: A Model-specific error
      allOf:
      - $ref: '#/components/schemas/Error'
      - type: object
        required:
        - errors
        properties:
          errors:
            type: array
            x-stoplight:
              id: m4ul9vcq2deh6
            items:
              $ref: '#/components/schemas/ModelError-Item'
    Timestamps:
      title: Timestamps
      x-stoplight:
        id: t82ecgfu0oj00
      type: object
      required:
      - created_at
      - updated_at
      properties:
        created_at:
          type: string
          x-stoplight:
            id: gjj950jpq0ga9
          format: date-time
          description: ISO8601 timestamp with local timezone
        updated_at:
          type: string
          x-stoplight:
            id: bwcuyfwc7aj0e
          format: date-time
          description: ISO8601 timestamp with local timezone
      additionalProperties: false
    Identifier:
      title: Identifier
      x-stoplight:
        id: gnd39lue5v7ol
      type: object
      required:
      - id
      properties:
        id:
          type: string
          x-stoplight:
            id: 2e38hjk4zd58m
          format: uuid
      additionalProperties: false
    Contact-Read-Nested:
      title: Contact-Read-Nested
      x-stoplight:
        id: 3u6d8qhsz5ehn
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - type: object
        required:
        - name
        - email
        - phone
        properties:
          name:
            type: string
            x-stoplight:
              id: sd80y9pbgvkok
            nullable: true
          email:
            type: string
            x-stoplight:
              id: 883fmt34pdeaj
            nullable: true
          phone:
            type: string
            x-stoplight:
              id: wdtqyju4t4u06
            example: '+18885551234'
            nullable: true
      description: ''
    NullableGeofenceType:
      title: NullableGeofenceType
      x-stoplight:
        id: ii94t82oqh5xo
      allOf:
      - $ref: '#/components/schemas/GeofenceType'
      nullable: true
      type: string
    Company-Read-Nested:
      title: Company-Read-Nested
      x-stoplight:
        id: cb2kn77qmf1l7
      description: Compact Company model for nested reads.
      allOf:
      - $ref: '#/components/schemas/Identifier'
        x-stoplight:
          id: jwsufva4znm91
      - $ref: '#/components/schemas/TreadId'
      - type: object
        properties:
          legal_name:
            type: string
            x-stoplight:
              id: yc10t8hieecwk
            description: The Company's name. Must be globally unique.
          company_type:
            $ref: '#/components/schemas/CompanyType'
        required:
        - legal_name
        - company_type
    OrderUnitOfMeasure:
      title: OrderUnitOfMeasure
      x-stoplight:
        id: kahcgn7w8swdv
      enum:
      - Load
      - Tonne
      - Ton
      - Yard
      - Meter
      - Foot
      - Liter
      - Hour
      - Bushel
      - Gallon
      - CubicMeter
      - Mile
      - Kilometer
      - Barrel
      - Bag
      - Pallet
      example: Load
    MaterialRate-Read-Typeahead:
      title: MaterialRate-Read-Typeahead
      x-stoplight:
        id: n7ssu2zszdqgx
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - type: object
        required:
        - sell_price
        - buy_price
        - unit_of_measure
        properties:
          sell_price:
            type: string
            x-stoplight:
              id: dskmpvrizqinj
            nullable: true
          buy_price:
            type: string
            x-stoplight:
              id: w107s2wjkvowa
            nullable: true
          unit_of_measure:
            $ref: '#/components/schemas/NullableOrderUnitOfMeasure'
          site:
            $ref: '#/components/schemas/Site-Read-Typeahead'
          material:
            $ref: '#/components/schemas/Material-Read-Typeahead'
          project:
            $ref: '#/components/schemas/Project-Read-Typeahead'
          customer_account:
            $ref: '#/components/schemas/Account-Read-Typeahead'
    MaterialRate-Create:
      title: MaterialRate-Create
      x-stoplight:
        id: lkwrvhtgd86bk
      type: object
      required:
      - material_id
      - unit_of_measure
      properties:
        material_id:
          type: string
          x-stoplight:
            id: gky0fz3oc9sg2
          format: uuid
        project_id:
          type: string
          x-stoplight:
            id: 6enxjo15yfscn
          format: uuid
          nullable: true
        site_id:
          type: string
          x-stoplight:
            id: q7jlxcjtr6f3x
          format: uuid
          nullable: true
        customer_account_id:
          type: string
          x-stoplight:
            id: yfrfnmb89oo5j
          format: uuid
          nullable: true
        buy_price:
          type: number
          x-stoplight:
            id: zi0uh93jp6p3q
          nullable: true
        sell_price:
          type: number
          x-stoplight:
            id: zjq8i1vnall2w
          nullable: true
        unit_of_measure:
          $ref: '#/components/schemas/OrderUnitOfMeasure'
      additionalProperties: false
    Project-Read-Typeahead:
      title: Project-Read-Typeahead
      x-stoplight:
        id: 3wdg6ghyvsknb
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - type: object
        required:
        - name
        - external_id
        properties:
          name:
            type: string
            description: Project name
          external_id:
            type: string
            x-stoplight:
              id: 7kipqxvhrgvk0
            nullable: true
    CompanyType:
      title: CompanyType
      x-stoplight:
        id: dkzo7gjbtb1b3
      enum:
      - broker
      - contractor
      - hauler
      - owner_operator
      - producer
      - super
      example: hauler
      description: Company Type
    Account-Read-Nested:
      title: Account-Read-Nested
      x-stoplight:
        id: zo8r3gsz1tm5h
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - $ref: '#/components/schemas/Discardable'
      - type: object
        x-stoplight:
          id: gl7hua7pv8xka
        required:
        - name
        - account_types
        - external_id
        - accounting_id
        - company
        - schedule_on
        properties:
          name:
            type: string
            x-stoplight:
              id: a7g065w5byfcf
          account_types:
            type: array
            x-stoplight:
              id: a0e9c3lpr1wad
            items:
              $ref: '#/components/schemas/AccountType'
          external_id:
            type: string
            x-stoplight:
              id: yfrec4y0a90cb
            nullable: true
          accounting_id:
            type: string
            x-stoplight:
              id: yfsec5y0a91cb
            nullable: true
          company:
            type: object
            x-stoplight:
              id: 9loqtu14mvlnq
            required:
            - id
            properties:
              id:
                type: string
                x-stoplight:
                  id: udjkdjrz08pzr
                format: uuid
          billing_address:
            $ref: '#/components/schemas/Address-Read-Nested'
          schedule_on:
            type: boolean
            x-stoplight:
              id: 0g9kx77zym4ok
          connected_company:
            $ref: '#/components/schemas/Company-Read-Nested'
          billing_contact:
            $ref: '#/components/schemas/Contact-Read-Nested'
    Site-Read-Nested:
      title: Site-Read-Nested
      x-stoplight:
        id: rt6xqxsfzf4iv
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - type: object
        required:
        - name
        - lat
        - lon
        - full_address
        - routable
        properties:
          name:
            type: string
            x-stoplight:
              id: 7r0x7wicrvwyy
          lat:
            type: string
            x-stoplight:
              id: cr6y5v0hdl5oo
            nullable: true
          lon:
            type: string
            x-stoplight:
              id: f23mkvamncbuw
            nullable: true
          address:
            $ref: '#/components/schemas/Address-Read-Nested'
          full_address:
            type: string
            x-stoplight:
              id: uxixxnmgfi47i
            nullable: true
          routable:
            type: boolean
            x-stoplight:
              id: uobfxkm0hujhv
          next_billion_geofence:
            $ref: '#/components/schemas/NextBillionGeofence-Read'
      - $ref: '#/components/schemas/Discardable'
    Address-Read:
      title: Address-Read
      x-stoplight:
        id: v1mcd2qgns2tf
      type: object
      required:
      - thoroughfare
      - premise
      - locality
      - administrative_area
      - postal_code
      - country
      - lat
      - lon
      - place_id
      properties:
        thoroughfare:
          type: string
          x-stoplight:
            id: 8wrr7qkc9ilqn
        premise:
          type: string
          x-stoplight:
            id: z4jth408out1q
          nullable: true
        locality:
          type: string
          x-stoplight:
            id: kfby6wqpgvxbz
        administrative_area:
          type: string
          x-stoplight:
            id: c9bkrloxf4t8d
        postal_code:
          type: string
          x-stoplight:
            id: 7zq51k1mof3o3
        country:
          type: string
          x-stoplight:
            id: iydw9q619ya01
          pattern: ^[A-Z]{2}
          example: US
          minLength: 2
          maxLength: 2
        lat:
          type: string
          x-stoplight:
            id: kqu1qtf9rivh1
          description: "latitude of the `Address`. \n\nMust be a stringified number between -90 and 90 inclusive.\n\nRequired if `lon` is present."
          nullable: true
        lon:
          type: string
          x-stoplight:
            id: oly2yabkzpk9g
          description: "longitude of the `Address`. \n\nMust be a stringified number between -180 and 180 inclusive.\n\nRequired if `lat` is present."
          nullable: true
        place_id:
          type: string
          x-stoplight:
            id: im1fdq7qqxdij
          description: NextBillion placeID
          nullable: true
      additionalProperties: false
    UnauthenticatedError-Response:
      title: UnauthenticatedError-Response
      x-stoplight:
        id: o477eph7ttbzt
      type: object
      required:
      - error
      properties:
        error:
          $ref: '#/components/schemas/UnauthenticatedError'
      additionalProperties: false
    Geofence-Data:
      title: Geofence-Data
      x-stoplight:
        id: ay73k76oae8gm
      type: object
      properties:
        id:
          type: string
          format: uuid
          x-stoplight:
            id: m9n8p7q6r5s4t
          description: NextBillionGeofence ID
        geofence:
          type: object
          x-stoplight:
            id: bo67u046r1ibk
          required:
          - name
          - type
          properties:
            id:
              type: string
              x-stoplight:
                id: nm2o97jli2zqm
              format: uuid
              description: NextBillion Geofence ID
            name:
              type: string
              x-stoplight:
                id: x5sp8wq8d2ack
            type:
              type: string
              x-stoplight:
                id: d91rv1gbtfkm0
              description: '`circle` or `polygon`'
            geojson:
              type: objec

# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/treadio/refs/heads/main/openapi/treadio-materialrates-api-openapi.yml