Deprecated GeoJSON attribute 'crs' removed and replace with new attribute 'crsName'.  Predefined quantityName values are always in lowercase. Updated example  values.

#%RAML 1.0 Library

# Name: dd-base-types.raml
#
# Version: 2.0.1
#
# Date: 2019-01-14
#
#  This file defines the basic datatypes used in the DD API and DD-OPER API.
#  Provide a discription when the type is NOT a custom type.
#  All attributes of a custum type must be described, unless the attribute is of a custom type.

types:
  AdditionalQuality:
    type: number
    description: Provides detailed information on specific Quality numbers.

  Aspect:
    description: A (usually mathematically derived) related variable of a specific measurement, forecast, etc.
    type: object
    properties:
      name:
        type: string
        description: The name of the aspect.
        example: measurement
      unit:
        type: string
        description: Unit of measurement of the aspect.
        example: m/s

  AspectSet:
    description: Defines a group of related variables for a single measurement, forecast, etc.
    type: object
    properties:
      name:
        type: AspectSetName
      aspects:
        type: Aspect[]
        description: An array of aspects.
        minItems: 0

  AspectSetName:
    description: Name of an AspectSet. If implementing systems require an aspect-filter in the request-url and it is omitted, "default" is taken.
    type: string
    example: "MinimumMaximumAverage"

  AspectPointsValue:
    description: Object used for Event.Aspect.Points. Specifies the values in the list of points for one of the aspects in an AspectSet.
    type: object
    properties:
      name:
        type: string
        description: Name of the aspect.
      points:
        type: PointsValue[]

  AspectValue:
    description: Object used for Event.Aspect[] results. Specifies the value for one of the aspects in an AspectSet.
    type: object
    properties:
      name:
        type: string
        description: Name of the aspect.
        example: Average
      value:
        type: ValueType
      limitSymbol?:
        description: Specifies that the value is e.g. higher (or lower) then the value in "value". Known limitSymbols are "<", ">", "<=", ">="
        type: string
        example: <
      quality?:
        type: Quality
      additionalQuality?:
        type: AdditionalQuality

  BoundingBox:
    description: The specification of a bounding box using the longitude and latitude of the most SouthWest point followed by the most NorthEast points (GeoJSON).
    type: Double[]
    minItems: 4
    maxItems: 4
    examples:
      -bbox: [ 4.123456, 52.123456, 10.123456, 55.123456 ]

  Double:
    description: A value of type Double.
    type: number
    format: double
    example: 4.123456

  EndTime:
    type: datetime
    example: 2018-01-01T00:00:00Z
    description:  The End date/time of the time series, or the End date/time of the interval for an individual value in the series. Uses the UCT (Zulu) notation.
      The endtime is exlusive, hence the requested period ends just before the given time.
      2018-01-01T00:00:00Z - 2018-01-01T00:00:10Z specifies a 10 minute period starting at midnight and
      ending at 2018-01-01T00:09:59.99999Z

  Error:
    description:  Error response in line with RFC7807. Although both optional the minimum information that should be given are the title and status.
    type: object
    properties:
      type?:
        description: Type of error.
        type: Url
      title?:
        description: Title of the error.
        type: string
        example: Error processing the request.
      status?:
        type: integer
        description: The HTTP error code number (HTTP Status Code).
        example: 404
      detail?:
        description: Details of the error
        type: string
        example: Request resulted in a response that was too large.
      instance?:
        description: Reference to the error for the provider.
        type: string | nil
        example: https://myservice/meaningOrError400
        # Additional fields, RFC7807 extension
      errors?:
        description: Error details. More than one error can occur within the problem.
        type: FilterError[]

  Event:
    description: In case of scalar time series the event contains time stamp and value, optionally extended with
      an interval specification (startTime/endTime/resultTime), and a quality indicator (quality, additionalQuality).
      In case of a time series with aspects and/or with values on multiple points, the events contains object for the aspects and/or points.
    type: object
    properties:
      timeStamp?:
        description: Timestamp of the occurrence of the event.
        type: datetime
      startTime?:
        type: StartTime
      endTime?:
        type: EndTime
      resultTime?:
        description: Result time.
        type: datetime
      value?:
        type: ValueType
      limitSymbol?:
        description: Specifies that the value is e.g. higher (or lower) then the value in "value". Known limitSymbols are "<", ">", "<=", ">="
        type: string
      quality?:
        type: Quality
      additionalQuality?:
        type: AdditionalQuality
      aspects?:
        type: AspectValue[] | AspectPointsValue []
        description: When the time series contains aspects the value/quality/unit are given in an object for each aspect or aspect+point.
      points?:
        type: PointsValue[]

  Filter:
    type: string
    description: Defines a query filter. TODO: describe syntax.

  FilterError:
    type: object
    description: Defines the field of an error in the filtering syntax.
    properties:
      errorType:
        type: string
        example: Unknown comparer.
      context:
        type: string
        example: Field 'locationCode'.

  Geometry:
    description: A geometry in GeoJSON format. Digital Delta currently formally only
      supports the Point and MultiPoint types. However, implementations may choose
      to also provide time series on a Polygon
    type: object
    properties:
      type:
        description: The geometry type. Must have the value "Point" or "MultiPoint".
        type: string
        examples:
          -point: "Point"
          -multipoint: "MultiPoint"
      coordinates?:
        type: Position | Positions
        examples:
          -point:  [4.234 , 5.23423]
          -multipoint:  [[4.2, 52.0], [3.2, 52.3,0]]

  Identifier:
    type: string
    description: An identifier can be anything expressed by a string.

  Institution:
    description: An institution is an organisation that produces data for the DD-API.
    type: object
    properties:
      name:
        type: string
        description: The name of the institution that produced and/or owns the data
      description?:
        type: string
        description: Additional description of the institution

# IntervalLength is not required as object since it is only used as query parameter
  IntervalLength:
    type: string
    description: Interval length of the sequence.
    default: 10min

  Location:
    description: Generic DD API 2.0 Location object, structured according to GeoJSON. Most attributes are optional, since the content returned in the response depends on whether it is a /dd or a /dd-oper request. Location attributes are placed within the properties group of the GeoJSON  object.
    properties:
      type:
        description: Type of GeoJSON object. In the DD-API the only allowed type is "Feature".
        type: string
        enum: ["Feature"]
      geometry:
        description: The coordinate(s) of the Location are placed within the "geometry" section of the GeoJSON object.
          DD-API uses Point and Multi-Point locations, but is not restricted to these two.
        type: Geometry | nil
      properties?:
        description: The attributes of the Location object are placed within the properties group of the GeoJSON object.
        type: object
        properties:
          url?:
            description: Url describing the location object. (Not provided in case of /dd-oper requests.)
            type: string
          node?:
            description: Specification of the node where the location is stored.
            type: Node
          locationId?:
            description: Id of the location.
            type: string
          locationCode?:
            type: LocationCode
          locationName?:
            description: Name of the location.
            type: LocationName
          referenceLevel?:
            description: GeoJSON element. Specifies the reference plane for the altitude coordinates (third). For example "NAP".
            type: string
          crsName?:
            description: The coordinate reference system of the given coordinates according to the INSPIRE definition
              (see url https://inspire.ec.europa.eu/documents/Data_Specifications/INSPIRE_Specification_CRS_v3.0.pdf section 4.4.1)
              GeoJSON does nolonger support reference to a Coordinate Reference System. It assumes coordinates are defined according WGS84.
              However, within DD-API there is a need to provide coordinates in different coordinate-systems, for instance ETRS89.
              The element is optional and when omitted WGS84 should be assumed.
              Remark: INSPIRE does not define 'ETRS89' as such, but specifies different 'flavors' of it with a suffix. To prevent
              unnecessary translation the commonly used value 'ETRS89' is allowed as equivelant for the INSPIRE value 'ETRS89-XYZ'.
            type: string
          locationNameSpace?:
            type: LocationNameSpace
            description: Remark: Only used in DD-OPER response.
          displayNameDetail?:
            type: LocationName
            description: Remark: Only used in DD-OPER response.
          displayNameGlobal?:
            type: LocationName
            description: Remark: Only used in DD-OPER response.
          displayNameSpace?:
            type: LocationNameSpace
            description: Remark: Only used in DD-OPER response.
          parentName?:
            type: LocationName
            description: Remark: Only used in DD-OPER response.

  LocationCode:
    type: string
    example: "HVH"

  LocationName:
    type: string
    example: "Hoek-van-Holland"

  LocationNameSpace:
    type: string
    example: "NL.RWS.WM"

  Node:
    description: Node objects contain the properties of the DD-node that contains the data. A node is an operational implementation of the Digital Delta specification.
    type: object
    properties:
      id?:
        description: Id of the node.
        type: Identifier
      name:
        type: string
        description: The name of the node.
      description?:
        type: string
        description: The description of the node.
      baseUrl?:
        type: string
        description: The base URL of the node.

  ObservationType:
    description: Generic DD API 2.0 quantity/parameter object. The DD-OPER API response returns a subset of the attributes.
    type: object
    properties:
      id?:
        description: Id of the observation type.
        type: Identifier
      url?:
        description: The provider's URL for the time series.
        type: Url
      node?:
        description: Reference to the DD-node that contains the data of the time series.
        type: Node
      quantity?:
        description: Quantity (grootheid) of the observation type.
        type: string
      parameterCode?:
        description: Parameter code specifying the observationtype. Non-biological observation types follow the Aquo standards.
        type: string
      description?:
        description: Description of the observation type.
        type: string
      unit?:
        description: (Measurement) unit of the observation type.
        type: string
      compartment?:
        description: The compartment in which the measurement/computation is available. Standardised Aquo compartments.
        type: string
        example:  OW, DL, GW, LW
      qualifier?:
        type: string
        description: Additional qualification of the measurement or computation. Can be used for the Aqou 'hoedanigheid'.
      quantityName?:
        description: Composed name of the quantity(.parameterCode) that was measured or computed.
          Remark: Only used in DD-OPER response.
        type: QuantityName
      aspectSet?:
        description: Optional, currently only provided and used by RWS.
        type: AspectSet

  PageLinks:
    description: The object contains urls and page size information to support back and forward paging
    type: object
    properties:
      totalObjectCount?:
        description: The actual number of objects available. When paging is used the response contains a subset of the total obejcts available up to the max page size.
        type: integer
      maxPageSize?:
        description: Maximum number of objects in the response. Defined by the Provider of the response.
        type: PageSize
      minPageSize?:
          description: Minimum number of objects in the response. Defined by the Provider of the response.
          type: PageSize
          minimum: 1
      self?:
        description: Url of the current request.
        type: Url | nil
      first?:
        description: Url to the first page of the result set.
        type: Url | nil
      prev:
        description: Url to the previous page of the result set.
        type: Url | nil
      next:
        description: Url to the next page of the result set.
        type: Url | nil
      last?:
        description: Url to the last page of the result set.
        type: Url | nil

  PageNumber:
    description: Page number in case the response is seprated in different pages.
    type: integer
    minimum: 1
    example: 1

  PageSize:
    description: Number of result objects per a single response page. Used for minimum, maximum and/or actual.
    type: integer
    minimum: 1
    maximum: 10000
    example: 10

  PointsValue:
    type: object
    properties:
      coordinates: Position
      value:
        description: The value of the measured or computed data.
        type: ValueType
      limitSymbol?:
        description: Specifies that the value is e.g. higher (or lower) then the value in "value". Known limitSymbols are "<", ">", "<=", ">="
        type: string
      quality?:
        description: Indicator for the quality of the measured or computed value in the 'value' attribute.
        type: Quality
      additionalQuality?:
        description: Additional information on the value in the 'quality' attribute.
        type: AdditionalQuality

  Position:
    description: |
      A location specified in an array with longitude, lattitude and optional altitude.
    type: Double[]
    minItems: 2
    maxItems: 3
    example: [4.234 , 5.23423]

  Positions:
    description: An array of Positions to specify a MultiPpoint location.
    type: Position[]
    minItems: 0
    examples:
      -multipoint: [[4.2, 52.0], [3.2, 52.3,0]]

  ProcessName:
    type: string
    description: The name of the mechanism to collect/derive the time series value.
      When accessing RWS' DD-API, providing a processName as query parameter is required. The process names are pre-defined (see examples).
      Extending the processname with a suffix, referencing a more detailed mechanism like a specific calculation model, is not allowed.
      Other implementions dot need to implement this query-parameter.
    example: measurement, forecast, astronomical, advise

  Provider:
    type: object
    description: Information regarding the system that is responsible for the response.
      Provides support contact information in case there are issues with response format or content.
    properties:
      name?:
        description: Name of the provider (of the service).
        type: string
      supportUrl?:
        description: Url to information for the provider (of the service).
        type: string
      apiVersion?:
        description: API Version with which the result set was generated. Can be used to parse the response.
        type: string
      responseType?:
        description: Name of the type of the result set. Can be used to parse the response.
        type: string
      responseTimestamp?:
        type: Timestamp
        description: Timestamp when this response was created.

  Quality:
    description: Defines the quality of the result (confidence).
    type: number

  QuantityName:
    type: string
    description: A name referencing a category of time series. The quantity names are predefined.
      For example 'waterlevel', 'watertemperature', 'waveheight'.
      Remark: Only used in DD-OPER
    example: waterLevel

  Source:
    description: Describes the type of data in the time series, and the owner of the data.
    type: object
    properties:
      process:
        description: Name of the process.
        type: ProcessName
      name?:
        type: SourceName
        description: A name describing the source, e.g. a model name.
      description?:
        type: string
        description: Additional description of the data source (might contain a URL to a site with information on the model).
      realizationCount?:
        type: integer
        description: if present, and larger then 1, the results are part of an ensemble run
      institution:
        type: Institution

  SourceName:
    type: string
    description: A name describing the source, e.g. a model name
    example: rws_prediction

  StartTime:
    type: datetime
    example: 2016-01-01T12:45:00Z
    description:  Start date/time of the time series, or the Start date/time of the interval for an individual value in the series. Uses the UCT (Zulu) notation.

  Timeseries:
    description: Generic DD API 2.0 time series object. The DD-OPER API response returns a subset of the attributes.
    type: object
    properties:
      node?:
        type: Node
      url?:
        description: The provider's URL for the time series.
        type: string
      id?:
        type: Identifier
      source:
        type: Source
      location:
        type: Location
      observationType:
        type: ObservationType
      startTime:
        description: Start date-time of the time series (the first timestamp/value pair available in the series).
        type: datetime
      endTime:
        description: End date-time of the time series (the last timestamp/value pair available in the series).
        type: datetime
      analysisTime?:
        description: Analysis date-time of the time series.
        type: datetime
      realization?:
        description: Realization count.
        type: number
      intervalLength?:
        description: Specifies the interval between events in the time series. If present and set to 'null', the time series is non-equidistant. TODO: decide on options for units.
        type: number
      valueType?:
        type: ValueType
      qualifier?:
        type: string
        description: Additional qualification of the measurement or computation.
      events?:
        type: Event[]
        description: If no startTime and no endTime are provided in the /time series-query, only meta-data is provided,
          so the events are not present.

  Timestamp:
    type: string
    description: Date and time in format "yyyy-mmm-ddThh:mm:ss.ffffffZ"  (UTC Zulu with minimal 3 digits of fractional seconds)
    example: "2018-07-05T15:11:36.123Z, 2018-07-05T15:11:36.123456Z, 2018-07-05T15:11:36.000Z"
    minLength: 24

  ValueType:
    type: number | string
    description: The type of values in the time series ('string' in case of categorized values, like 'natuurlijk' vs 'aangelegd'). Also known as QuantityValue.

  Url:
    type: string
    description: Correctly formatted url reference.

  Uuid:
    type: string
    pattern: "[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}"
    description: Unique identifier for the datasource. Version 4.
    example: 978fdf5c-95c8-43a5-82ff-d27d9e6d685f

#%RAML 1.0 Library

# Name: dd-base-types.raml
#
# Date: 2018-08-21
#
#  This file defines the basic datatypes used in the DD API and DD-OPER API.
#  Provide a discription when the type is NOT a custom type.
#  All attributes of a custum type must be described, unless the attribute is of a custom type.

types:
  AdditionalQuality:
    type: number
    description: Provides detailed information on specific Quality numbers.

  Aspect:
    description: A (usually mathematically derived) related variable of a specific measurement, forecast, etc.
    type: object
    properties:
      name:
        type: string
        description: The name of the aspect.
        example: measurement
      unit:
        type: string
        description: Unit of measurement of the aspect.
        example: m/s

  AspectSet:
    description: Defines a group of related variables for a single measurement, forecast, etc.
    type: object
    properties:
      name:
        type: AspectSetName
      aspects:
        type: Aspect[]
        description: An array of aspects.
        minItems: 0

  AspectSetName:
    description: Name of an AspectSet. If implementing systems require an aspect-filter in the request-url and it is omitted, "default" is taken.
    type: string
    example: "MinimumMaximumAverage"

  AspectPointsValue:
    description: Object used for Event.Aspect.Points. Specifies the values in the list of points for one of the aspects in an AspectSet.
    type: object
    properties:
      name:
        type: string
        description: Name of the aspect.
      points:
        type: PointsValue[]

  AspectValue:
    description: Object used for Event.Aspect[] results. Specifies the value for one of the aspects in an AspectSet.
    type: object
    properties:
      name:
        type: string
        description: Name of the aspect.
        example: Average
      value:
        type: ValueType
      limitSymbol?:
        description: Specifies that the value is e.g. higher (or lower) then the value in "value". Known limitSymbols are "<", ">", "<=", ">="
        type: string
        example: <
      quality?:
        type: Quality
      additionalQuality?:
        type: AdditionalQuality

  BoundingBox:
    description: The specification of a bounding box using the longitude and latitude of the most SouthWest point followed by the most NorthEast points (GeoJSON).
    type: Double[]
    minItems: 4
    maxItems: 4
    examples:
      -bbox: [ 4.123456, 52.123456, 10.123456, 55.123456 ]

  Double:
    description: A value of type Double.
    type: number
    format: double
    example: 4.123456

  EndTime:
    type: datetime
    example: 2018-01-01T00:00:00Z
    description:  The End date/time of the time series, or the End date/time of the interval for an individual value in the series. Uses the UCT (Zulu) notation.
      The endtime is exlusive, hence the requested period ends just before the given time.
      2018-01-01T00:00:00Z - 2018-01-01T00:00:10Z specifies a 10 minute period starting at midnight and
      ending at 2018-01-01T00:09:59.99999Z

  Error:
    description:  Error response in line with RFC7807. Although both optional the minimum information that should be given are the title and status.
    type: object
    properties:
      type?:
        description: Type of error.
        type: Url
      title?:
        description: Title of the error.
        type: string
        example: Error processing the request.
      status?:
        type: integer
        description: The HTTP error code number (HTTP Status Code).
        example: 404
      detail?:
        description: Details of the error
        type: string
        example: Request resulted in a response that was too large.
      instance?:
        description: Reference to the error for the provider.
        type: string | nil
        example: https://myservice/meaningOrError400
        # Additional fields, RFC7807 extension
      errors?:
        description: Error details. More than one error can occur within the problem.
        type: FilterError[]

  Event:
    description: In case of scalar time series the event contains time stamp and value, optionally extended with
      an interval specification (startTime/endTime/resultTime), and a quality indicator (quality, additionalQuality).
      In case of a time series with aspects and/or with values on multiple points, the events contains object for the aspects and/or points.
    type: object
    properties:
      timeStamp?:
        description: Timestamp of the occurrence of the event.
        type: datetime
      startTime?:
        type: StartTime
      endTime?:
        type: EndTime
      resultTime?:
        description: Result time.
        type: datetime
      value?:
        type: ValueType
      limitSymbol?:
        description: Specifies that the value is e.g. higher (or lower) then the value in "value". Known limitSymbols are "<", ">", "<=", ">="
        type: string
      quality?:
        type: Quality
      additionalQuality?:
        type: AdditionalQuality
      aspects?:
        type: AspectValue[] | AspectPointsValue []
        description: When the time series contains aspects the value/quality/unit are given in an object for each aspect or aspect+point.
      points?:
        type: PointsValue[]

  Filter:
    type: string
    description: Defines a query filter. TODO: describe syntax.

  FilterError:
    type: object
    description: Defines the field of an error in the filtering syntax.
    properties:
      errorType:
        type: string
        example: Unknown comparer.
      context:
        type: string
        example: Field 'locationCode'.

  Geometry:
    description: A geometry in GeoJSON format. Digital Delta currently formally only
      supports the Point and MultiPoint types. However, implementations may choose
      to also provide time series on a Polygon
    type: object
    properties:
      type:
        description: The geometry type. Must have the value "Point" or "MultiPoint".
        type: string
        example: "Point"
      coordinates?:
        type: Position | Positions
        examples:
          -point:  [4.234 , 5.23423]
          -multipoint:  [[4.2, 52.0], [3.2, 52.3,0]]

  Identifier:
    type: string
    description: An identifier can be anything expressed by a string.

  Institution:
    description: An institution is an organisation that produces data for the DD-API.
    type: object
    properties:
      name:
        type: string
        description: The name of the institution that produced and/or owns the data
      description?:
        type: string
        description: Additional description of the institution

# IntervalLength is not required as object since it is only used as query parameter
  IntervalLength:
    type: string
    description: Interval length of the sequence.
    default: 10min

  Location:
    description: Generic DD API 2.0 Location object, structured according to GeoJSON. Most attributes are optional, since the content returned in the response depends on whether it is a /dd or a /dd-oper request. Location attributes are placed within the properties group of the GeoJSON  object.
    properties:
      type:
        description: Type of GeoJSON object. In the DD-API the only allowed type is "Feature".
        type: string
        enum: ["Feature"]
      geometry:
        description: The coordinate(s) of the Location are placed within the "geometry" section of the GeoJSON object.
          DD-API uses Point and Multi-Point locations, but is not restricted to these two.
        type: Geometry | nil
      properties?:
        description: The attributes of the Location object are placed within the properties group of the GeoJSON object.
        type: object
        properties:
          url?:
            description: Url describing the location object. (Not provided in case of /dd-oper requests.)
            type: string
          node?:
            description: Specification of the node where the location is stored.
            type: Node
          locationId?:
            description: Id of the location.
            type: string
          locationCode?:
            type: LocationCode
          locationName?:
            description: Name of the location.
            type: LocationName
          referenceLevel?:
            description: GeoJSON element. Specifies the reference plane for the altitude coordinates (third). For example "NAP".
            type: string
          crs?:
            description: GeoJSON Coordinate Reference System element. According to GeoJSON the CRS always as to be "WGS84",
              hence the crs element has been removed from the GeoJSON Feature object. However, the DD-API still has the field,
              to be able to specify that the data is provided in another CRS (although this is discouraged).
              If present, the crs property should be according to the now obsolete GeoJSON specification (see http://geojson.org/geojson-spec#coordinate-reference-system-objects).
            type: object
          locationNameSpace?:
            type: LocationNameSpace
            description: Remark: Only used in DD-OPER response.
          displayNameDetail?:
            type: LocationName
            description: Remark: Only used in DD-OPER response.
          displayNameGlobal?:
            type: LocationName
            description: Remark: Only used in DD-OPER response.
          displayNameSpace?:
            type: LocationNameSpace
            description: Remark: Only used in DD-OPER response.
          parentName?:
            type: LocationName
            description: Remark: Only used in DD-OPER response.

  LocationCode:
    type: string
    example: "HVH"

  LocationName:
    type: string
    example: "Hoek-van-Holland"

  LocationNameSpace:
    type: string
    example: "NL.RWS.WM"

  Node:
    description: Node objects contain the properties of the DD-node that contains the data. A node is an operational implementation of the Digital Delta specification.
    type: object
    properties:
      id?:
        description: Id of the node.
        type: Identifier
      name:
        type: string
        description: The name of the node.
      description?:
        type: string
        description: The description of the node.
      baseUrl?:
        type: string
        description: The base URL of the node.

  ObservationType:
    description: Generic DD API 2.0 quantity/parameter object. The DD-OPER API response returns a subset of the attributes.
    type: object
    properties:
      id?:
        description: Id of the observation type.
        type: Identifier
      url?:
        description: The provider's URL for the time series.
        type: Url
      node?:
        description: Reference to the DD-node that contains the data of the time series.
        type: Node
      quantity?:
        description: Quantity (grootheid) of the observation type.
        type: string
      parameterCode?:
        description: Parameter code specifying the observationtype. Non-biological observation types follow the Aquo standards.
        type: string
      description?:
        description: Description of the observation type.
        type: string
      unit?:
        description: (Measurement) unit of the observation type.
        type: string
      compartment?:
        description: The compartment in which the measurement/computation is available. Standardised Aquo compartments.
        type: string
        example:  OW, DL, GW, LW
      qualifier?:
        type: string
        description: Additional qualification of the measurement or computation. Can be used for the Aqou 'hoedanigheid'.
      quantityName?:
        description: Composed name of the quantity(.parameterCode) that was measured or computed.
          Remark: Only used in DD-OPER response.
        type: QuantityName
      aspectSet?:
        description: Optional, currently only provided and used by RWS.
        type: AspectSet

  PageLinks:
    description: The object contains urls and page size information to support back and forward paging
    type: object
    properties:
      totalObjectCount?:
        description: The actual number of objects available. When paging is used the response contains a subset of the total obejcts available up to the max page size.
        type: integer
      maxPageSize?:
        description: Maximum number of objects in the response. Defined by the Provider of the response.
        type: PageSize
      minPageSize?:
          description: Minimum number of objects in the response. Defined by the Provider of the response.
          type: PageSize
          minimum: 1
      self?:
        description: Url of the current request.
        type: Url | nil
      first?:
        description: Url to the first page of the result set.
        type: Url | nil
      prev:
        description: Url to the previous page of the result set.
        type: Url | nil
      next:
        description: Url to the next page of the result set.
        type: Url | nil
      last?:
        description: Url to the last page of the result set.
        type: Url | nil

  PageNumber:
    description: Page number in case the response is seprated in different pages.
    type: integer
    minimum: 1
    example: 1

  PageSize:
    description: Number of result objects per a single response page. Used for minimum, maximum and/or actual.
    type: integer
    minimum: 1
    maximum: 10000
    example: 10

  PointsValue:
    type: object
    properties:
      coordinates: Position
      value:
        description: The value of the measured or computed data.
        type: ValueType
      limitSymbol?:
        description: Specifies that the value is e.g. higher (or lower) then the value in "value". Known limitSymbols are "<", ">", "<=", ">="
        type: string
      quality?:
        description: Indicator for the quality of the measured or computed value in the 'value' attribute.
        type: Quality
      additionalQuality?:
        description: Additional information on the value in the 'quality' attribute.
        type: AdditionalQuality

  Position:
    description: |
      A location specified in an array with longitude, lattitude and optional altitude.
    type: Double[]
    minItems: 2
    maxItems: 3
    example: [4.234 , 5.23423]

  Positions:
    description: An array of Positions to specify a MultiPpoint location.
    type: Position[]
    minItems: 0
    examples:
      -multipoint: [[4.2, 52.0], [3.2, 52.3,0]]

  ProcessName:
    type: string
    description: The name of the mechanism to collect/derive the time series value.
      When accessing RWS' DD-API, providing a processName as query parameter is required. The process names are pre-defined (see examples).
      Extending the processname with a suffix, referencing a more detailed mechanism like a specific calculation model, is not allowed.
      Other implementions dot need to implement this query-parameter.
    example: measurement, forecast, astronomical, advise

  Provider:
    type: object
    description: Information regarding the system that is responsible for the response.
      Provides support contact information in case there are issues with response format or content.
    properties:
      name?:
        description: Name of the provider (of the service).
        type: string
      supportUrl?:
        description: Url to information for the provider (of the service).
        type: string
      apiVersion?:
        description: API Version with which the result set was generated. Can be used to parse the response.
        type: string
      responseType?:
        description: Name of the type of the result set. Can be used to parse the response.
        type: string
      responseTimestamp?:
        type: Timestamp
        description: Timestamp when this response was created.

  Quality:
    description: Defines the quality of the result (confidence).
    type: number

  QuantityName:
    type: string
    description: A name referencing a category of time series. The quantity names are predefined.
      For example 'WaterLevel', 'WaterTemperature', 'WaveHeight'.
      Remark: Only used in DD-OPER
    example: WaterLevel

  Source:
    description: Describes the type of data in the time series, and the owner of the data.
    type: object
    properties:
      process:
        description: Name of the process.
        type: ProcessName
      name?:
        type: SourceName
        description: A name describing the source, e.g. a model name.
      description?:
        type: string
        description: Additional description of the data source (might contain a URL to a site with information on the model).
      realizationCount?:
        type: integer
        description: if present, and larger then 1, the results are part of an ensemble run
      institution:
        type: Institution

  SourceName:
    type: string
    description: A name describing the source, e.g. a model name
    example: rws_prediction

  StartTime:
    type: datetime
    example: 2016-01-01T12:45:00Z
    description:  Start date/time of the time series, or the Start date/time of the interval for an individual value in the series. Uses the UCT (Zulu) notation.

  Timeseries:
    description: Generic DD API 2.0 time series object. The DD-OPER API response returns a subset of the attributes.
    type: object
    properties:
      node?:
        type: Node
      url?:
        description: The provider's URL for the time series.
        type: string
      id?:
        type: Identifier
      source:
        type: Source
      location:
        type: Location
      observationType:
        type: ObservationType
      startTime:
        description: Start date-time of the time series (the first timestamp/value pair available in the series).
        type: datetime
      endTime:
        description: End date-time of the time series (the last timestamp/value pair available in the series).
        type: datetime
      analysisTime?:
        description: Analysis date-time of the time series.
        type: datetime
      realization?:
        description: Realization count.
        type: number
      intervalLength?:
        description: Specifies the interval between events in the time series. If present and set to 'null', the time series is non-equidistant. TODO: decide on options for units.
        type: number
      valueType?:
        type: ValueType
      qualifier?:
        type: string
        description: Additional qualification of the measurement or computation.
      events?:
        type: Event[]
        description: If no startTime and no endTime are provided in the /time series-query, only meta-data is provided,
          so the events are not present.

  Timestamp:
    type: string
    description: Date and time in format "yyyy-mmm-ddThh:mm:ss.ffffffZ"  (UTC Zulu with minimal 3 digits of fractional seconds)
    example: "2018-07-05T15:11:36.123Z, 2018-07-05T15:11:36.123456Z, 2018-07-05T15:11:36.000Z"
    minLength: 24

  ValueType:
    type: number | string
    description: The type of values in the time series ('string' in case of categorized values, like 'natuurlijk' vs 'aangelegd'). Also known as QuantityValue.

  Url:
    type: string
    description: Correctly formatted url reference.

  Uuid:
    type: string
    pattern: "[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}"
    description: Unique identifier for the datasource. Version 4.
    example: 978fdf5c-95c8-43a5-82ff-d27d9e6d685f


fix raml compatibility regression

fix raml compatibility regression

Summary:
Previously, AppDefinition command health check property was defined as
'value', not 'shell'

Test Plan: Double-check that the change complies with AppDefinition.json

Reviewers: meichstedt, jasongilanfarr, jdef, aquamatthias

Reviewed By: jasongilanfarr, jdef, aquamatthias

Subscribers: jenkins, marathon-team

Differential Revision: https://phabricator.mesosphere.com/D266

#%RAML 1.0 Library
uses:
  strings: stringTypes.raml
  command: mesosCommand.raml
  numbers: numberTypes.raml
types:
  HttpHealthCheck:
    type: object
    properties:
      endpoint:
        type: strings.Name
        description: |
          The endpoint name to use.
          In "host" mode health checks use the hostPort. In other modes use the containerPort.
      path?: strings.Path
      scheme?: strings.HttpScheme
  TcpHealthCheck:
    type: object
    properties:
      endpoint:
        type: strings.Name
        description: |
          The endpoint name to use.
          In "host" mode health checks use the hostPort. In other modes use the containerPort.
  CommandHealthCheck:
    type: object
    properties:
      command: command.MesosCommand
  HealthCheck:
    properties:
      http?: HttpHealthCheck
      tcp?: TcpHealthCheck
      exec?: CommandHealthCheck
      gracePeriodSeconds?:
        type: integer
        format: int32
        description: |
          Health check failures are ignored within this number of seconds of
          the task being started or until the task becomes healthy for the
          first time.
        minimum: 0
        default: 300
      intervalSeconds?:
        type: integer
        format: int32
        description: Interval between the health checks
        minimum: 0
        default: 60
      maxConsecutiveFailures?:
        type: integer
        format: int32
        description: Number of consecutive failures until the task will be killed
        minimum: 0
        default: 3
      timeoutSeconds?:
        type: integer
        format: int32
        description: Amount of time to wait for the health check to complete.
        minimum: 0
        default: 20
      delaySeconds?:
        type: integer
        format: int32
        description: Amount of time to wait until starting the health checks.
        minimum: 0
        default: 2
    usage: Must specify a single type of check, http, tcp, or exec
  AppHealthCheckProtocol:
    type: string
    enum: [HTTP, HTTPS, TCP, COMMAND, MESOS_TCP, MESOS_HTTP, MESOS_HTTPS]
    description: |
      Protocol of the requests to be performed. One of HTTP, HTTPS, TCP or COMMAND.
  CommandCheck:
    properties:
      value:
        type: string
        description: |
          Command line executed by the default shell.
          This process has to return with a zero exit code to indicate the process is healthy.
          Return codes other than null signal, the task is unhealthy.
  AppHealthCheck:
    type: object
    properties:
      command?: CommandCheck
      gracePeriodSeconds:
        type: integer
        format: int32
        description: |
          Health check failures are ignored within this number of seconds of
          the task being started or until the task becomes healthy for the
          first time.
        minimum: 0
        default: 300
      ignoreHttp1xx?:
        type: boolean
        description: Ignore HTTP 1xx responses
      intervalSeconds:
        type: integer
        format: int32
        description: Number of seconds to wait between health checks
        minimum: 0
        default: 60
      maxConsecutiveFailures:
        type: integer
        format: int32
        description: |
          Number of consecutive health check failures after which the
          unhealthy task should be killed.
        minimum: 0
        default: 3
      path?:
        type: string
        description: |
          Path to endpoint exposed by the task that will provide health status.
          Note: only used if protocol == HTTP[S]."
        example: /path/to/health
      port?:
        type: numbers.EphemeralPort
        description: |
          The specific port to connect to.
          In case of dynamic ports, see portIndex.
      portIndex?:
        type: numbers.EphemeralPort
        description: |
          Index in this app's ports array to be used for health requests.
          An index is used so the app can use random ports,
          like [0, 0, 0] for example, and tasks could be started with
          port environment variables like $PORT1.
      protocol?:
        type: AppHealthCheckProtocol
        default: HTTP
      timeoutSeconds:
        type: integer
        format: int32
        default: 20
        description: |
          Number of seconds after which a health check is considered a failure
          regardless of the response.
      delaySeconds?:
        type: integer
        format: int32
        description: Amount of time to wait until starting the health checks.
        minimum: 0
        default: 2

#%RAML 1.0 Library
uses:
  strings: stringTypes.raml
  command: mesosCommand.raml
  numbers: numberTypes.raml
types:
  HttpHealthCheck:
    type: object
    properties:
      endpoint:
        type: strings.Name
        description: |
          The endpoint name to use.
          In "host" mode health checks use the hostPort. In other modes use the containerPort.
      path?: strings.Path
      scheme?: strings.HttpScheme
  TcpHealthCheck:
    type: object
    properties:
      endpoint:
        type: strings.Name
        description: |
          The endpoint name to use.
          In "host" mode health checks use the hostPort. In other modes use the containerPort.
  CommandHealthCheck:
    type: object
    properties:
      command: command.MesosCommand
  HealthCheck:
    properties:
      http?: HttpHealthCheck
      tcp?: TcpHealthCheck
      exec?: CommandHealthCheck
      gracePeriodSeconds?:
        type: integer
        format: int32
        description: |
          Health check failures are ignored within this number of seconds of
          the task being started or until the task becomes healthy for the
          first time.
        minimum: 0
        default: 300
      intervalSeconds?:
        type: integer
        format: int32
        description: Interval between the health checks
        minimum: 0
        default: 60
      maxConsecutiveFailures?:
        type: integer
        format: int32
        description: Number of consecutive failures until the task will be killed
        minimum: 0
        default: 3
      timeoutSeconds?:
        type: integer
        format: int32
        description: Amount of time to wait for the health check to complete.
        minimum: 0
        default: 20
      delaySeconds?:
        type: integer
        format: int32
        description: Amount of time to wait until starting the health checks.
        minimum: 0
        default: 2
    usage: Must specify a single type of check, http, tcp, or exec
  AppHealthCheckProtocol:
    type: string
    enum: [HTTP, HTTPS, TCP, COMMAND, MESOS_TCP, MESOS_HTTP, MESOS_HTTPS]
    description: |
      Protocol of the requests to be performed. One of HTTP, HTTPS, TCP or COMMAND.
  CommandCheck:
    properties:
      command:
        type: string
        description: |
          Command line executed by the default shell.
          This process has to return with a zero exit code to indicate the process is healthy.
          Return codes other than null signal, the task is unhealthy.
  AppHealthCheck:
    type: object
    properties:
      command?: CommandCheck
      gracePeriodSeconds:
        type: integer
        format: int32
        description: |
          Health check failures are ignored within this number of seconds of
          the task being started or until the task becomes healthy for the
          first time.
        minimum: 0
        default: 300
      ignoreHttp1xx?:
        type: boolean
        description: Ignore HTTP 1xx responses
      intervalSeconds:
        type: integer
        format: int32
        description: Number of seconds to wait between health checks
        minimum: 0
        default: 60
      maxConsecutiveFailures:
        type: integer
        format: int32
        description: |
          Number of consecutive health check failures after which the
          unhealthy task should be killed.
        minimum: 0
        default: 3
      path?:
        type: string
        description: |
          Path to endpoint exposed by the task that will provide health status.
          Note: only used if protocol == HTTP[S]."
        example: /path/to/health
      port?:
        type: numbers.EphemeralPort
        description: |
          The specific port to connect to.
          In case of dynamic ports, see portIndex.
      portIndex?:
        type: numbers.EphemeralPort
        description: |
          Index in this app's ports array to be used for health requests.
          An index is used so the app can use random ports,
          like [0, 0, 0] for example, and tasks could be started with
          port environment variables like $PORT1.
      protocol?:
        type: AppHealthCheckProtocol
        default: HTTP
      timeoutSeconds:
        type: integer
        format: int32
        default: 20
        description: |
          Number of seconds after which a health check is considered a failure
          regardless of the response.
      delaySeconds?:
        type: integer
        format: int32
        description: Amount of time to wait until starting the health checks.
        minimum: 0
        default: 2


Code formating

Code formating

#%RAML 1.0
title: DámeMatiku
version: v1
baseUri: http://api.damematiku.cz/{version}

securitySchemes:
  oauth_2_0:
    description: |
        Dropbox supports OAuth 2.0 for authenticating all API requests.
    type: OAuth 2.0
    describedBy:
        headers:
            Authorization:
                description: |
                   Used to send a valid OAuth 2 access token. Do not use
                   with the "access_token" query string parameter.
                type: string
        queryParameters:
            access_token:
                description: |
                   Used to send a valid OAuth 2 access token. Do not use together with
                   the "Authorization" header
                type: string
        responses:
            401:
                description: |
                    Bad or expired token. This can happen if the user or the site
                    revoked or expired an access token. To fix, you should re-
                    authenticate the user.
            403:
                description: |
                    Bad OAuth request (wrong consumer key, bad nonce, expired
                    timestamp...). Unfortunately, re-authenticating the user won't help here.
    settings:
      accessTokenUri: https://api.damematiku.cz/{version}/oauth2/token
      authorizationGrants: [ token ]

/oauth2/token:
  get:
    queryParameters:
      grant_type:
        type: string
      googleIdToken:
        type: string
    responses:
      200:
        description: Authention went OK
        body:
          application/json:
            example: |
              {
                access_token: "asdlkjadlkajsdkahsjdnaksdjasldkjasdlaskjdals",
                expires: 213556
              }
      400:
        description: Authenticatin failed

/tags:
  get:
    responses:
      200:
        body:
          application/json:
            example: |
              [
                {
                  "id": "zs",
                  "title": "ZS",
                  "subtags": []
                }
              ]

/search:
  get:
    queryParameters:
      q:
        description: Search query
        type: string
        required: true
    responses:
      200:
        body:
          application/json:
            example: |
              [
                {
                  "type": "section",
                  "id": 12,
                  "title": "Section 1",
                  "chapters": [
                    {
                      "id": 124,
                      "title": "Some chapter"
                    }
                  ]
                },
                {
                  "type": "chapter",
                  "id": 123,
                  "title": "Chapter about 'search query'"
                }
              ]

/subjects/{subjectId}/sections:
  get:
    queryParameters:
      tags:
        description: Selected tags to filter by
        type: array
        required: false
    responses:
      200:
        body:
          application/json:
            example: |
              [
                {
                  "id": 12,
                  "title": "Section 1",
                  "chapters": [
                    {
                      "id": 124,
                      "title": "Some chapter"
                    }
                  ]
                }
              ]
/chapters/{chapterId}:
  get:
    responses:
      200:
        body:
          application/json:
            example: |
              {
                "id": 123,
                "title": "Some chapter",
                "description": "HTML description.",
                "videos": [
                  {
                    "id": 153,
                    "title": "Some chapter",
                    "author": {
                      "id": 1325,
                      "name": "Lord Voldemort",
                      "reputation": 10000,
                      "avatarUrl": "http://someurl.com/img.png"
                    },
                    "youtubeId": "13kbnrfv01",
                    "votes": -3,
                    "myVote": "up"
                  }
                ],
                "sponsor": {
                  "name": "Some company",
                  "logoUrl": "http://someurl.com/logo.png",
                  "link": "http://someurl.com"
                },
                "nextChapter": {
                  "id": 124,
                  "title": "Another chapter"
                },
                "previousChapter": {
                  "id": 125,
                  "title": "Some another chapter"
                }
              }
  post:

/videos:
  /featured:
    get:
      responses:
        200:
          body:
            application/json:
              example: |
                [
                  {
                    "id": 153,
                    "title": "Some chapter",
                    "author": {
                      "id": 1325,
                      "name": "Lord Voldemort",
                      "reputation": 10000,
                      "avatarUrl": "http://someurl.com/img.png"
                    },
                    "youtubeId": "13kbnrfv01",
                    "votes": -3,
                    "myVote": "up"
                  }
                ]
  /{videoId}:
    get:
      responses:
        200:
          body:
            application/json:
              example: |
                {
                  "id": 153,
                  "title": "Some chapter",
                  "author": {
                    "id": 1325,
                    "name": "Lord Voldemort",
                    "reputation": 10000,
                    "avatarUrl": "http://someurl.com/img.png"
                  },
                  "youtubeId": "13kbnrfv01",
                  "votes": -3,
                  "myVote": "up",
                  "description": "HTML description.",
                  "disqusPageId": "12141"
                }

    /upvote:
      post:
        responses:
          200:
          401:
          403:
    /downvote:
      post:
        responses:
          200:
          401:
          403:

/authors/{authorId}:
  get:
    responses:
      200:
        body:
          application/json:
            example: |
              {
                "id": 1325,
                "name": "Lord Voldemort",
                "reputation": 10000,
                "avatarUrl": "http://someurl.com/img.png",
                "videos": [
                  {
                    "id": 153,
                    "title": "Some chapter",
                    "youtubeId": "13kbnrfv01",
                    "votes": -3,
                    "myVote": "up"
                  }
                ]
              }
  /follow:
    post:
      responses:
        200:
        401:
        403:
  /unfollow:
    post:
      responses:
        200:
        401:
        403:

/users:
  /create-account-google-auth:
    post:
      queryParameters:
        client_id:
        client_secret:
      body:
        application/x-www-form-urlencoded:
          properties:
            device_id:
            googleIdToken:
              type: string
              description: A valid Google ID token.
            userType:
              description: "'student', 'teacher' or 'other'"
              type: string

#%RAML 1.0
title: DámeMatiku
version: v1
baseUri: http://api.damematiku.cz/{version}

securitySchemes:
  oauth_2_0:
    description: |
        Dropbox supports OAuth 2.0 for authenticating all API requests.
    type: OAuth 2.0
    describedBy:
        headers:
            Authorization:
                description: |
                   Used to send a valid OAuth 2 access token. Do not use
                   with the "access_token" query string parameter.
                type: string
        queryParameters:
            access_token:
                description: |
                   Used to send a valid OAuth 2 access token. Do not use together with
                   the "Authorization" header
                type: string
        responses:
            401:
                description: |
                    Bad or expired token. This can happen if the user or the site
                    revoked or expired an access token. To fix, you should re-
                    authenticate the user.
            403:
                description: |
                    Bad OAuth request (wrong consumer key, bad nonce, expired
                    timestamp...). Unfortunately, re-authenticating the user won't help here.
    settings:
      accessTokenUri: https://api.damematiku.cz/{version}/oauth2/token
      authorizationGrants: [ token ]

/oauth2/token:
  get:
    queryParameters:
      grant_type:
        type: string
      google_id_token:
        type: string
    responses:
      200:
        description: Authention went OK
        body:
          application/json:
            example: |
              {
                access_token: "asdlkjadlůkajsdůkahsjdnaksdjasldkjasdlaskjdals",
                expires: 213556
              }
      400:
        description: Authenticatin failed

/tags:
  get:
    responses:
      200:
        body:
          application/json:
            example: |
              [
                {
                  "id": "zs",
                  "title": "ZS",
                  "subtags": []
                }
              ]

/search:
  get:
    queryParameters:
      q:
        description: Search query
        type: string
        required: true
    responses:
      200:
        body:
          application/json:
            example: |
              [
                {
                  "type": "section",
                  "id": 12,
                  "title": "Section 1",
                  "chapters": [
                    {
                      "id": 124,
                      "title": "Some chapter"
                    }
                  ]
                },
                {
                  "type": "chapter",
                  "id": 123,
                  "title": "Chapter about 'search query'"
                }
              ]

/subjects/{subjectId}/sections:
  get:
    queryParameters:
      tags:
        description: Selected tags to filter by
        type: array
        required: false
    responses:
      200:
        body:
          application/json:
            example: |
              [
                {
                  "id": 12,
                  "title": "Section 1",
                  "chapters": [
                    {
                      "id": 124,
                      "title": "Some chapter"
                    }
                  ]
                }
              ]
/chapters/{chapterId}:
  get:
    responses:
      200:
        body:
          application/json:
            example: |
              {
                "id": 123,
                "title": "Some chapter",
                "description": "HTML description.",
                "videos": [
                  {
                    "id": 153,
                    "title": "Some chapter",
                    "author": {
                      "id": 1325,
                      "name": "Lord Voldemort",
                      "reputation": 10000,
                      "avatarUrl": "http://someurl.com/img.png"
                    },
                    "youtubeId": "13kbnrfv01",
                    "votes": -3,
                    "myVote": "up"
                  }
                ],
                "sponsor": {
                  "name": "Some company",
                  "logoUrl": "http://someurl.com/logo.png",
                  "link": "http://someurl.com"
                },
                "nextChapter": {
                  "id": 124,
                  "title": "Another chapter"
                },
                "previousChapter": {
                  "id": 125,
                  "title": "Some another chapter"
                }
              }
  post:

/videos:
  /featured:
    get:
      responses:
        200:
          body:
            application/json:
              example: |
                [
                  {
                    "id": 153,
                    "title": "Some chapter",
                    "author": {
                      "id": 1325,
                      "name": "Lord Voldemort",
                      "reputation": 10000,
                      "avatarUrl": "http://someurl.com/img.png"
                    },
                    "youtubeId": "13kbnrfv01",
                    "votes": -3,
                    "myVote": "up"
                  }
                ]
  /{videoId}:
    get:
      responses:
        200:
          body:
            application/json:
              example: |
                {
                  "id": 153,
                  "title": "Some chapter",
                  "author": {
                    "id": 1325,
                    "name": "Lord Voldemort",
                    "reputation": 10000,
                    "avatarUrl": "http://someurl.com/img.png"
                  },
                  "youtubeId": "13kbnrfv01",
                  "votes": -3,
                  "myVote": "up",
                  "description": "HTML description.",
                  "disqusPageId": "12141"
                }

    /upvote:
      post:
        responses:
          200:
          401:
          403:
    /downvote:
      post:
        responses:
          200:
          401:
          403:

/authors/{authorId}:
  get:
    responses:
      200:
        body:
          application/json:
            example: |
              {
                "id": 1325,
                "name": "Lord Voldemort",
                "reputation": 10000,
                "avatarUrl": "http://someurl.com/img.png",
                "videos": [
                  {
                    "id": 153,
                    "title": "Some chapter",
                    "youtubeId": "13kbnrfv01",
                    "votes": -3,
                    "myVote": "up"
                  }
                ]
              }
  /follow:
    post:
      responses:
        200:
        401:
        403:
  /unfollow:
    post:
      responses:
        200:
        401:
        403:

/users:
  /create-account-google-auth:
    post:
      queryParameters:
        client_id:
        client_secret:
      body:
        application/x-www-form-urlencoded:
          properties:
            device_id:
            googleIdToken:
              type: string
              description: A valid Google ID token.
            userType:
              description: "'student', 'teacher' or 'other'"
              type: string


space between notes

space between notes

#%RAML 0.8
---
title: Shipping Guide API 2.0
baseUri: https://api.bring.com/shippingguide

documentation:
- title: Introduction
  content: |
      The Shipping Guide API 2.0 (Fraktguiden) for provides you with different shipping alternatives for your shipments. If you request applicable shipping alternatives with all relevant details you will receive an object with the following data:

      - Prices
      - Estimated delivery times
      - GUI information

      The API returns the recommended way to present these shipping alternatives, meaning that the actual response can easily be shown in a web-shop checkout without any sorting or filtering and with human readable service texts.

      The Shipping Guide API 2.0 has both a REST and a SOAP interface. The REST interface only supports single consignments, while the SOAP interface can be used for multiple consignments.

      **NOTE**:
       - **Any new users created post launch date 28-may-2020 attempting to request agreement prices by using old versions of Shipping Guide API, will be provided with an error message referring to the latest version.**

       - **Any Shipping Guide requests for old phase 1 services without customer number specified, will return the corresponding revised service after 01.10.2020.**

- title: Versioning
  content: |
      ### Upgrade from previous version

      Shipping Guide API 2.0 is a replacement for the original API that is now deprecated. If needed, can you you still read the [documentation for the old version of the Shipping Guid API](/api/shipping-guide/).

      Now that Shipping Guide API 2.0 is out you might be wondering how to upgrade to it. The [Upgrade to version 2.0](/api/shipping-guide_2/upgrade-to-version-2) will help you on your way to version 2.0 of the Shipping Guide API.

      ### Why upgrade?

      * [Unified request and response model](/api/shipping-guide_2/#getting-started): Due to backward compatibility, existing SOAP API versions had too many ways of requesting to Shipping Guide could be always confusing for clients. This has been simplified in the new version with one unified way of requesting to Shipping Guide.
      * [Better error handling for both SOAP and REST](/api/shipping-guide_2/#handle-api-errors): The new version of API gives ability to handle error in a much simpler way.
      * [Ability to fetch agreement prices specific to a service on REST](/api/shipping-guide_2/#get-shipment-prices-and-estimated-delivery): Now you can specify multiple services and along with multiple customer number in a single REST request. [How?](/api/shipping-guide_2/#get-shipment-prices-and-estimated-delivery)
      *  Some improvements to our service offering are planned for 2018-19. More info about upcoming changes will follow to all our partners. Future services will be supported by this new API-version in addition to other improvements. Note that our old versions of API’s will not support future changes in our service offering.

      ### Versioning strategy
      The Shipping Guide makes an effort to always be backwards compatible regarding data format for requests and responses. To achieve this, namespace schema versioning is used in the request for webservices, indicating which version the client is on and what data-format the client expects in the result. For REST, versioning is defined as part of endpoint itself.

      **Important**: All clients must accept **new (unknown) elements** in the response. E.g. unknown elements should be ignored. Also, **new error codes and warning codes** could be added as well. The client framework used by client must not crash when **unknown elements or new code values** are are encountered.

      When incompatible changes in the schema are made (other than addition of new elements), the namespace versioning will be updated accordingly. The new schema is used at the *same endpoint URL* as before for webservices. Old schema versions will be shut down some time in the future, so its recommended always updating to the latest version.

- title: Authentication
  content: |
      The Shipping Guide API 2.0 requires authentication. To make API requests, you will need an API key from Mybring. Steps for getting a key and description of headers can be found on the general API [Getting Started / Authentication](/api/#authentication) page.

- title: Example walkthrough
  content: |
      This guide will walk you through getting shipment alternatives for your first consignment using Shipping Guide API. In this example we will be calling the SOAP interface with a HTTP client and query for the service `SERVICEPAKKE` and `PA_DOREN` for two packages.

      ### 1. Add additional headers
      Since we're using the SOAP (1.1) interface we'll have to add the following header:

      - `Content-type: text/xml`

      Most SOAP libraries will do this for you.

      ### 2. Add the body to the request
      In this request we will query prices and expected delivery time for the service `SERVICEPAKKE` for a single package being sent from the postal code 0015 to 5518 in Norway.

      ```
      <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                        xmlns:ns="http://www.bring.no/logistics/shippingguide/2.0">
          <soapenv:Header/>
          <soapenv:Body>
              <ns:ShippingGuideRequest xmlns:ns="http://www.bring.no/logistics/shippingguide/2.0">
                  <ns:Language>no</ns:Language>
                  <ns:WithPrice>true</ns:WithPrice>
                  <ns:WithExpectedDelivery>false</ns:WithExpectedDelivery>
                  <ns:WithGuiInformation>true</ns:WithGuiInformation>
                  <ns:NumberOfAlternativeDeliveryDates>0</ns:NumberOfAlternativeDeliveryDates>
                  <ns:EDI>true</ns:EDI>
                  <ns:PostingAtPostoffice>true</ns:PostingAtPostoffice>
                  <ns:Trace>true</ns:Trace>
                  <ns:Consignments>
                    <ns:Consignment id="101">
                        <ns:Products>
                            <ns:Product>
                                <ns:Id>SERVICEPAKKE</ns:Id>
                            </ns:Product>
                        </ns:Products>
                        <ns:FromCountryCode>NO</ns:FromCountryCode>
                        <ns:FromPostalCode>0015</ns:FromPostalCode>
                        <ns:ToCountryCode>NO</ns:ToCountryCode>
                        <ns:ToPostalCode>5518</ns:ToPostalCode>
                        <ns:AddressLine>Testsvingen 12</ns:AddressLine>
                        <ns:ShippingDate>
                            <ns:Year>2016</ns:Year>
                            <ns:Month>10</ns:Month>
                            <ns:Day>10</ns:Day>
                            <ns:Hour>10</ns:Hour>
                            <ns:Minute>0</ns:Minute>
                        </ns:ShippingDate>
                        <ns:AdditionalServices>
                            <ns:AdditionalService>
                                <ns:Id>EVARSLING</ns:Id>
                            </ns:AdditionalService>
                            <ns:AdditionalService>
                                <ns:Id>POSTOPPKRAV</ns:Id>
                            </ns:AdditionalService>
                        </ns:AdditionalServices>
                        <ns:Packages>
                            <ns:Package id="10">
                                <ns:Height>10</ns:Height>
                                <ns:Width>10</ns:Width>
                                <ns:Length>10</ns:Length>
                                <ns:GrossWeight>50</ns:GrossWeight>
                            </ns:Package>
                            <ns:Package id="11">
                                <ns:Height>10</ns:Height>
                                <ns:Width>10</ns:Width>
                                <ns:Length>10</ns:Length>
                                <ns:GrossWeight>50</ns:GrossWeight>
                            </ns:Package>
                            <ns:Package id="12">
                                <ns:Height>11</ns:Height>
                                <ns:Width>10</ns:Width>
                                <ns:Length>10</ns:Length>
                                <ns:GrossWeight>50</ns:GrossWeight>
                            </ns:Package>
                        </ns:Packages>
                    </ns:Consignment>
                  </ns:Consignments>
              </ns:ShippingGuideRequest>
          </soapenv:Body>
      </soapenv:Envelope>
      ```

      ### 3. Submit the request

      Post your request to

      ```

        https://api.bring.com/shippingguide/api/ws

      ```

      The response may have changed since it was documented but you will get a response that looks something like this:

      ```
      <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
          <SOAP-ENV:Header/>
          <SOAP-ENV:Body>
              <ns2:ShippingGuideResponse xmlns:ns2="http://www.bring.no/logistics/shippingguide/2.0">
                  <ns2:Consignments>
                      <ns2:Consignment consignmentId="101">
                          <ns2:Products>
                              <ns2:Product>
                                  <ns2:Id>SERVICEPAKKE</ns2:Id>
                                  <ns2:ProductionCode>1202</ns2:ProductionCode>
                                  <ns2:GuiInformation>
                                      <ns2:SortOrder>11</ns2:SortOrder>
                                      <ns2:MainDisplayCategory>Pakke</ns2:MainDisplayCategory>
                                      <ns2:SubDisplayCategory>Til private</ns2:SubDisplayCategory>
                                      <ns2:DisplayName>Klimanøytral Servicepakke</ns2:DisplayName>
                                      <ns2:ProductName>Klimanøytral Servicepakke</ns2:ProductName>
                                      <ns2:DescriptionText>Pakken kan spores og utleveres på ditt lokale hentested.</ns2:DescriptionText>
                                      <ns2:HelpText>Klimanøytral Servicepakke leveres til mottakers lokale hentested (postkontor eller Post i Butikk). Mottaker kan velge å hente sendingen på et annet hentested enn sitt lokale. Mottaker varsles om at sendingen er ankommet via SMS, e-post eller hentemelding i postkassen. Sendingen kan spores ved hjelp av sporingsnummeret.</ns2:HelpText>
                                      <ns2:ShortName>Klimanøytral Servicepakke</ns2:ShortName>
                                      <ns2:ProductURL>http://www.bring.no/sende/pakker/private-i-norge/hentes-pa-posten</ns2:ProductURL>
                                      <ns2:DeliveryType>Hentested</ns2:DeliveryType>
                                      <ns2:MaxWeightInKgs>35</ns2:MaxWeightInKgs>
                                  </ns2:GuiInformation>
                                  <ns2:Price>
                                      <ns2:ListPrice currencyCode="NOK">
                                          <ns2:PriceWithoutAdditionalServices>
                                              <ns2:AmountWithoutVAT>239.00</ns2:AmountWithoutVAT>
                                              <ns2:VAT>59.75</ns2:VAT>
                                              <ns2:AmountWithVAT>298.75</ns2:AmountWithVAT>
                                          </ns2:PriceWithoutAdditionalServices>
                                          <ns2:PriceWithAdditionalServices>
                                              <ns2:AmountWithoutVAT>239.00</ns2:AmountWithoutVAT>
                                              <ns2:VAT>59.75</ns2:VAT>
                                              <ns2:AmountWithVAT>298.75</ns2:AmountWithVAT>
                                          </ns2:PriceWithAdditionalServices>
                                      </ns2:ListPrice>
                                  </ns2:Price>
                                  <ns2:ExpectedDelivery>
                                      <ns2:WorkingDays>2</ns2:WorkingDays>
                                      <ns2:UserMessage/>
                                      <ns2:FormattedExpectedDeliveryDate>12.10.2018</ns2:FormattedExpectedDeliveryDate>
                                      <ns2:ExpectedDeliveryDate>
                                          <ns2:Year>2018</ns2:Year>
                                          <ns2:Month>10</ns2:Month>
                                          <ns2:Day>12</ns2:Day>
                                      </ns2:ExpectedDeliveryDate>
                                      <ns2:AlternativeDeliveryDates/>
                                  </ns2:ExpectedDelivery>
                              </ns2:Product>
                              <ns2:Product>
                                  <ns2:Id>PA_DOREN</ns2:Id>
                                  <ns2:ProductionCode>1736</ns2:ProductionCode>
                                  <ns2:GuiInformation>
                                      <ns2:SortOrder>41</ns2:SortOrder>
                                      <ns2:MainDisplayCategory>Pakke</ns2:MainDisplayCategory>
                                      <ns2:SubDisplayCategory>Til private</ns2:SubDisplayCategory>
                                      <ns2:DisplayName>På Døren</ns2:DisplayName>
                                      <ns2:ProductName>På Døren</ns2:ProductName>
                                      <ns2:DescriptionText>Pakken kan spores og leveres hjem til deg mellom kl. 17-21. Sjåføren ringer 30-60 min før ankomst.</ns2:DescriptionText>
                                      <ns2:HelpText>På Døren leveres hjem til mottaker mellom kl. 17 og 21. Mottaker varsles i god tid om forventet utleveringsdag via SMS eller e-post, i tillegg til nytt varsel når sendingen er lastet på bil for utkjøring samme kveld. Sjåføren ringer mottaker 30-60 minutter før ankomst. Mottaker kan endre leveringsdag når pakken spores (gjelder ikke lokalpakker). Dersom sendingen ikke kan leveres, blir den sendt til mottakers lokale hentested (postkontor eller Post i Butikk). Sendingen kan spores ved hjelp av sporingsnummeret.</ns2:HelpText>
                                      <ns2:ShortName>På Døren</ns2:ShortName>
                                      <ns2:ProductURL>http://www.bring.no/sende/pakker/private-i-norge/hjemlevering</ns2:ProductURL>
                                      <ns2:DeliveryType>Dør</ns2:DeliveryType>
                                      <ns2:MaxWeightInKgs>35</ns2:MaxWeightInKgs>
                                  </ns2:GuiInformation>
                                  <ns2:Price>
                                      <ns2:ListPrice currencyCode="NOK">
                                          <ns2:PriceWithoutAdditionalServices>
                                              <ns2:AmountWithoutVAT>270.00</ns2:AmountWithoutVAT>
                                              <ns2:VAT>67.50</ns2:VAT>
                                              <ns2:AmountWithVAT>337.50</ns2:AmountWithVAT>
                                          </ns2:PriceWithoutAdditionalServices>
                                          <ns2:PriceWithAdditionalServices>
                                              <ns2:AmountWithoutVAT>270.00</ns2:AmountWithoutVAT>
                                              <ns2:VAT>67.50</ns2:VAT>
                                              <ns2:AmountWithVAT>337.50</ns2:AmountWithVAT>
                                          </ns2:PriceWithAdditionalServices>
                                      </ns2:ListPrice>
                                  </ns2:Price>
                                  <ns2:Warnings>
                                      <ns2:Warning>
                                          <ns2:code>NO_EXPECTED_DELIVERY</ns2:code>
                                          <ns2:description>Expected delivery date is not available</ns2:description>
                                      </ns2:Warning>
                                  </ns2:Warnings>
                              </ns2:Product>
                          </ns2:Products>
                      </ns2:Consignment>
                  </ns2:Consignments>
              </ns2:ShippingGuideResponse>
          </SOAP-ENV:Body>
      </SOAP-ENV:Envelope>
      ```

      If you want to know more about the fields you can have a look at the XSD linked from the section [Request and response structure](/api/shipping-guide_2/#request-and-response-structure)

- title: Error handling
  content: |
      When using the Shipping Guide it is important to handle errors gracefully. Your users should still be able to order even if the Shipping Guide API returns an error or if there is an error establishing a connection to the API.

      The Shipping Guide API return two levels of error information:

      * HTTP error codes or SOAP fault with a message in the body

        For REST we follow general convention of HTTP status codes.
        For SOAP we give out detailed error decription along with an error code which can be parsed programmatically.

        ```
        <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
            <SOAP-ENV:Header/>
            <SOAP-ENV:Body>
                <SOAP-ENV:Fault>
                    <faultcode>SOAP-ENV:Client</faultcode>
                    <faultstring>FG_INPUT_010 Number of alternative delivery dates must be numeric and less than 10 [errorId 2806bbda-1df0-4b1b-b008-1068f5c57f06]
                    </faultstring>
                    <detail>
                        <code>FG_INPUT_010</code>
                        <description>Error number of alternative deliverydates</description>
                    </detail>
                </SOAP-ENV:Fault>
            </SOAP-ENV:Body>
        </SOAP-ENV:Envelope>
        ```

        Possible error codes can be found [here](https://api.bring.com/shippingguide/api/errors?clientUrl=developer.bring.com)

      * An error object in the response that is on service level

        When we are not able to process one of the service requested, we will respond with a error on service level. Details of possible error codes are documented in [XSD](https://api.bring.com/shippingguide/api/ws/shipping-guide-20.xsd) and [WDSL](https://api.bring.com/shippingguide/api/ws/shippingguide-20.wsdl) itself, making it easier for clients to parse it.

- title: Improve performance
  content: |
      To have better performance of the api

      * Request can be limited to have only the services needed since the response time of some services can be slow as compared to others
      * If the request is only to find the lead time / prices of different service, the flag for withExpectedDelivery / withPrices should be set to true and others can be set to false. In case of REST these are different endpoints.
      * For net prices requests should include customer number and correct package details
      * Request can include limited number of consignments in each request for quick response.
      * New shipments request can be part of separate request

- title: Estimated arrival time for parcels going to pickup points
  content: |
      For our Norwegian domestic B2C parcel services Klimanøytral Servicepakke (SERVICEPAKKE) and Pakke til hentested (5800), you can now get extended leadtime information - the estimated arrival time for one or more pickup points.

      Earlier, we have just returned the expected delivery **date** when you request our Shipping Guide API to get leadtime for SERVICEPAKKE/5800. Now, based on a machine learning model gathering scanning data from all pickup points in Norway, we are also predicting the **arrival window** - i.e. when the parcel is expected to arrive at a specific pickup point on that specific date. If you are already showing expected delivery date in your checkout, we strongly recomment that you consider increasing the value by also including the predicted arrival window.

      To get the estimaterd arrival time for one or more pickup points, use the following new fields:
      * SOAP: WithEstimatedDeliveryTime, PickupPoints
      * REST: estimateddeliverytime, pickuppoints

      Note: along with WithEstimatedDeliveryTime, make sure ensure the flag WithExpectedDelivery is also set to true, and remember that customerNumber must also be set.

      There are two ways of using the functionality for estimated arrival time for pickup points in our Shipping Guide API - with or without the Pickup Point API:

      ### Estimated arrival time for specified pickup points (w/ Pickup Point API)
      You specify which pickup points you want us to return estimated arrival time for by including the relevant pickup point IDs in the Shipping guide request. Based on that, we return the start and end time of the expected arrival time window for each pickup point ID you have specified in the request. For a best possible customer experience, we strongly recommend that you use the functionality in combination with the Pickup Point API.

      ### Estimated arrival time for the end users default pickup point (w/o Pickup Point API)
      In the absence of specified pickup point IDs, we take care of looking up the recipient` s default pickup point, based on it` s postal code. Based on that, we return the start and end time of the expected arrival time window for the recipient`s default pickup point.

      ### How to present the time window data in your checkout
      We recommend to insert the start (X) and end (Y) time values into the following sentence:

      **Pakken ankommer vanligvis mellom kl. X og Y / The parcel usually arrives between X and Y.**

      Together with the expected delivery date, we recommend the following implementation:

      **Forventet levert XX.XX.20XX. Pakken ankommer vanligvis mellom kl. X og Y / Expected delivered XX.XX.20XX. The parcel usually arrives between X and Y.**

      Note that Bring cannot guarantee the arrival time for a specific parcel. The estimated arrival time indicates when, based on historical scanning data, the parcel normally will become available for pickup at a specific pickup point on that specific date. Also note that CustomerNumber is mandatory to set in order to get estimated delivery time.

- title: Shipping Guide topics
  content: |
      If you want to know more about corner cases/topics/etc, then [Let's talk about Shipping Guide](/api/shipping-guide_2/topics)

/v2/products:
  displayName: Get shipment prices and estimated delivery
  description: |
      Use this endpoint to get expected delivery, service categories and additional information.

      ### Measurements
      For cargo services(5100, 5300, 9100, CARGO), Weight is mandatory and one of the Volume / Load Meter / Dimensions / Number of Pallets is mandatory.

      Note: The prices for our revised services depends on volumetric weight: 5000, 5100, 5300, 5600, 5800, 4850 plus return services 9000, 9100, 9300 or 9600. For these services, dimensions (L/W/H) is needed to calculate the expected price correctly. Dimensions are also used to decide if handling fee or specialgoods fee will apply to the shipment. You might leave dimensions empty in your request, but be aware that returned prices might be incorrect.

  get:
    description: Get shipment prices
    headers:
      X-MyBring-API-Uid:
        description: Your Mybring login ID
        required: true
      X-MyBring-API-Key:
        description: Your user's API key
        required: true
      Accept:
        description: Specify request format (application/json, application/xml)
        required: true
    queryParameters:
      fromcountry:
        description: Sender country code
        type: string
        required: true
      tocountry:
        description: Receiver country code
        type: string
        required: true
      frompostalcode:
        description: Sender postal code
        type: string
        required: true
      topostalcode:
        description: Receiver postal code
        type: string
        required: true
      addressLine:
        description: Specify address. This parameter can be maximum 35 character long. It will be for Bedriftspakke and På døren only.
        type: string
        example: Testsvingen 12
        required: false
      product:
        description: List of services requested. Multiple services can be requested in a single request. Requested service can also be specified with a customer number separated with delimiter (**:**). For example CARGO**:**CARGO-123456
        type: string
      date:
        description: Shipping date
        type: date
        example: 2018-11-18
        required: false
      time:
        description: Shipping time
        type: date
        example: 12:30
        required: false
      weight:
        description: Package weight in grams
        type: integer
        required: false
      volumeindm3:
        description: Package volume in dm3
        type: integer
        required: false
      loadingmeter:
        description: Package loading meters
        type: double
        required: false
      width:
        description: Package width in cm
        type: integer
        required: false
      length:
        description: Package length in cm
        type: integer
        required: false
      height:
        description: Package height in cm
        type: integer
        required: false
      numberofpallets:
        displayName: Number of pallets
        type: integer
        required: false
      nonstackable:
        description: Set to true if you know that pallet would be non-stackable
        type: boolean
        required: false
        default: false
      edi:
        description: Tells if the parcel will be registered using EDI when being booked. It may affect price and which services are available
        type: boolean
        required: false
        default: true
      postingatpostoffice:
        description: |
          Tells whether the parcel is delivered at a post office when it is shipped. A surcharge will be applied for SERVICEPAKKE and BPAKKE_DOR-DOR
        type: boolean
        required: false
        default: false
      additionalservice:
        displayName: Additional service
        description: Multiple value added services can be requested by repeating this parameter
        required: false
        type: string
      customernumber:
        description: Lets you specify which customer number to use in the request. If specified and service is not supplied with delimited customer number, then it will be applied on all request services
        type: string
        example: CARGO-123456
        required: false
      language:
        description: Language used for the service texts
        type: string
        default: no
        required: false
      volumeSpecial:
        description: True if the package has a shape that requires special handling
        type: boolean
        default: false
        required: false
      incoterms:
        description: Terms of delivery
        type: string
        required: false
      unnumber:
        description: Code for dangerous goods
        type: integer
        required: false
      payer:
        description: Payer type. Possible values are SENDER, RECEIVER or THIRD_PARTY
        type: string
        required: false
      numberofdeliverydates:
        description: Number of alternative delivery dates to be suggested by API for request
        type: integer
        required: false
      nonstandardcourierservice:
        description: Specify service code for customize courier services in the request. It will be for NonStandard Courier only.
        type: string
        example: CDA
        required: true
      estimateddeliverytime:
        description: True if you want estimated delivery time of input pickup points. Also, 'withExpectedDelivery' flag should be set to True along with this. Eligible services are 5800 and SERVICEPAKKE.
        type: boolean
        required: false
      pickuppoints:
        description: If pickup points are specified then estimated delivery time will be added in the response for them, when 'estimateddeliverytime' flag is True. If it is not specified, then default pickup point(s) for receiver's postal code will be used. Eligible services are 5800 and SERVICEPAKKE. However we recommend to always specify pickup points for optimum results.
        type: string
        example: 171102,124518
        required: false

    responses:
      200:
        displayName: Successful response
        description: |
          A successful response
      400:
        displayName: User error
        description: |
          This can mean that a required field or parameter has not been provided, the value supplied is invalid, or the combination of provided fields is invalid.
      401:
        displayName: Unauthorized
        description: |
          A failed response when the request is unauthenticated

/v2/products/price:
  displayName: Get shipment prices
  description: |
      Use this endpoint to get prices. The request parameters are the same as for [Get shipment prices and estimated delivery](/api/shipping-guide_2/#get-shipment-prices-and-estimated-delivery)
  get:
    description: Use this endpoint to get price. The request parameters are the same as for [Get shipment prices and estimated delivery](/api/shipping-guide_v2/#get-shipment-prices-and-estimated-delivery)

/v2/products/expectedDelivery:
  displayName: Get expected delivery times
  description: |
      Use this endpoint to get expected delivery. The request parameters are the same as for [Get shipment prices and estimated delivery](/api/shipping-guide_2/#get-shipment-prices-and-estimated-delivery)
  get:
    description: Get estimated delivery time

/api/ws:
  displayName: SOAP
  description: |
      The SOAP Body follows the same XML Schema Definition (XSD) as stated above.
      ### Request and response structure
        If you request shipping alternatives via the API your request and response will have to comply with the following schemas:

        [https://api.bring.com/shippingguide/api/ws/shipping-guide-20.xsd](https://api.bring.com/shippingguide/api/ws/shipping-guide-20.xsd)

        [https://api.bring.com/shippingguide/api/ws/shippingguide-20.wsdl](https://api.bring.com/shippingguide/api/ws/shippingguide-20.wsdl)

  post:
    description: Use this endpoint to get same information as above REST API
    headers:
      X-MyBring-API-Uid:
        description: Your Mybring login ID
      X-MyBring-API-Key:
        description: Your user's API key
      Accept:
        description: Specify request format (application/xml)
    body:
      application/xml:
        example: !include examples/soap_estimated_delivery_time_request.xml
    responses:
          200:
            displayName: Estimated delivery time successful response
            body:
              application/xml:
                example: !include examples/soap_estimated_delivery_time_response_200.xml