---
title: "POST /udl/ionoobservation/createBulk"
method: POST
path: "/udl/ionoobservation/createBulk"
tags: ["Observation"]
---

# POST /udl/ionoobservation/createBulk

`POST /udl/ionoobservation/createBulk`

## Request

- Base URL: `https://unifieddatalibrary.com`
- URL: `https://unifieddatalibrary.com/udl/ionoobservation/createBulk`
- Auth: none declared

Service operation intended for initial integration only, to take a list of IonoObservation records as a POST body and ingest into the database. This operation is not intended to be used for automated feeds into UDL. Data providers should contact the UDL team for specific role assignments and for instructions on setting up a permanent feed through an alternate mechanism.

## Request body

- IonoObservationIngest[]
  - `id` string: Unique identifier of the record, auto-generated by the system.
  - `classificationMarking` string, required: Classification marking of the data in IC/CAPCO Portion-marked format.
  - `idSensor` string: Unique identifier of the reporting sensor.
  - `origSensorId` string: Optional identifier provided by observation source to indicate the sensor identifier which produced this observation. This may be an internal identifier and not necessarily a valid sensor ID.
  - `system` string, required: Ionosonde hardware type or data collection type together with possible additional descriptors.
  - `neProfileName` string: Name of the algorithm used for the electron density profile.
  - `neProfileVersion` number, double: Version of the algorithm used for the electron density profile.
  - `scalerInfo` IonoObservationScalerInfoIngest: The ScalerInfo record describes the person or system who interpreted the ionogram in IonoObservation.
    - `type` string: Scaler type (MANUAL, AUTOMATIC or UNKNOWN).
    - `name` string: Scaler name.
    - `organization` string: Scaler organization.
    - `version` number, double: Scaler version.
    - `confidenceScore` integer: Scaler confidence score.
    - `confidenceLevel` integer: Scaler confidence level.
  - `densityProfile` IonoObservationDensityProfileIngest: Profile of electron densities in the ionosphere associated with an IonoObservation.
    - `parabolic` IonoObservationDensityProfileParabolicIngest: Coefficients to describe the E, F1, and F2 layers as parabolic-shape segments.
      - `description` string: General description of the QP computation algorithm.
      - `parabolicItems` IonoObservationDensityProfileParabolicItemIngest[]: Describes the E, F1, and F2 layers as parabolic-shape segments.
        - `layer` string: Ionospheric plasma layer (E, F1, or F2).
        - `f` number, double: Plasma frequency at the layer peak, in MHz.
        - `z` number, double: Height of the layer peak, in kilometers.
        - `y` number, double: Half-thickness of the layer, in kilometers.
    - `quasiParabolic` IonoObservationDensityProfileQuasiParabolicIngest: Coefficients to describe profile shape as quasi-parabolic segments.
      - `description` string: General description of the quasi-parabolic computation algorithm.
      - `earthRadius` number, double: Value of the Earth's radius, in kilometers, used for computations.
      - `quasiParabolicSegments` IonoObservationDensityProfileQuasiParabolicSegmentIngest[]: Array of quasi-parabolic segments. Each segment is the best-fit 3-parameter quasi-parabolas defined via A, B, C coefficients, f^2=A/r^2+B/r+C”. Usually 3 groups for E, F1, and F2 layers, but additional segments may be used to improve accuracy.
        - `index` integer: The index of this segment in the list, from 1 to NumSegments.
        - `rb` number, double: Starting range of the segment, in kilometers from the Earth's center.
        - `re` number, double: Ending range of the segment, in kilometers from the Earth's center.
        - `a` number, double: Coefficient A.
        - `b` number, double: Coefficient B.
        - `c` number, double: Coefficient C.
        - `error` number, double: Best-fit error.
    - `valleyModelDescription` string: Description of the valley model and parameters.
    - `valleyModelCoeffs` number[]: Array of valley model coefficients.
    - `shiftedChebyshev` IonoObservationDensityProfileShiftedChebyshevIngest: Coefficients to describe either the E, F1, and bottomside F2 profile shapes or the height uncertainty boundaries.
      - `description` string: Description of the computation technique.
      - `shiftedChebyshevs` IonoObservationDensityProfileShiftedChebyshevEntryIngest[]: Up to 3 groups of coefficients, using “shiftedChebyshev” sub-field, to describe E, F1, and bottomside F2 profile shapes, or up to 6 groups of coefficients to describe height uncertainty boundaries (upper and lower).
        - `layer` string: The ionospheric plasma layer.
        - `fstart` number, double: Start frequency of the layer, in MHz.
        - `fstop` number, double: Stop frequency of the layer, in MHz.
        - `peakheight` number, double: Peak height of the layer, in kilometers.
        - `zhalfNm` number, double: Height at which density is half of the peak Nm, in kilometers.
        - `n` integer: Number of coefficients in the expansion.
        - `coeffs` number[]: Array of coefficients.
        - `error` number, double: Best fit error.
    - `topsideExtensionChapmanConst` IonoObservationDensityProfileTopsideExtensionChapmanConstIngest: Parameters of the constant-scale-height Chapman layer.
      - `description` string: Description of the Chapman computation technique.
      - `nmF2` number, double: Peak density of F2 layer, in grams per cubic centimeter.
      - `hmF2` number, double: Peak height of F2 layer, in kilometers.
      - `scaleF2` number, double: Scale height if F2 layer at the peak, in kilometers.
      - `chi` number, double: Peak Density Thickness (PDT) for description of the flat-nose shape, in kilometers.
    - `topsideExtensionVaryChap` IonoObservationDensityProfileTopsideExtensionVaryChapIngest: Varying scale height Chapman topside layer.
      - `description` string: Description of the Chapman computation technique.
      - `nmF2` number, double: Peak density of F2 layer, in grams per cubic centimeter.
      - `hmF2` number, double: Peak height of F2 layer, in kilometers.
      - `scaleF2` number, double: Scale height if F2 layer at the peak, in kilometers.
      - `alpha` number, double: Alpha parameter of the profile shape.
      - `beta` number, double: Beta parameter of the profile shape.
      - `ht` number, double: Transition height, in kilometers.
      - `chi` number, double: Peak Density Thickness (PDT) for description of the flat-nose shape, in kilometers.
    - `iri` IonoObservationDensityProfileIRIIngest: Full set of the IRI formalism coefficients.
      - `description` string: Description of IRI implementation.
      - `nmF2` number, double: Peak density of F2 layer, in grams per cubic centimeter.
      - `hmF2` number, double: Peak height of F2 layer, in kilometers.
      - `b0` number, double: B0 parameter of the F2 layer shape.
      - `b1` number, double: B1 parameter of the F2 layer shape.
      - `nmF1` number, double: Peak density of the F1 layer, in grams per cubic centimeter.
      - `hmF1` number, double: Peak height of the F1 layer, in kilometers.
      - `d1` number, double: D1 parameter of the F1 layer shape.
      - `hz` number, double: Height HZ of the interim layer, in kilometers.
      - `hValTop` number, double: The valley height, in kilometers.
      - `nValB` number, double: The valley depth, in grams per cubic centimeter.
      - `nmE` number, double: Peak density of the E layer, in per cubic centimeter.
      - `hmE` number, double: Peak height of the F2 layer, in kilometers.
      - `hdx` number, double: Height of the intermediate region at the top of D region, in kilometers.
      - `nmD` number, double: Peak density of the D layer, in per cubic centimeter.
      - `hmD` number, double: Peak height of the D layer, in kilometers.
      - `ha` number, double: Starting height of the D layer, in kilometers.
      - `fp1` number, double: TBD.
      - `fp2` number, double: TBD.
      - `fp30` number, double: TBD.
      - `fp3U` number, double: TBD.
      - `chi` number, double: Peak Density Thickness (PDT) for description of the flat-nose shape, in kilometers.
  - `stationId` string, required: URSI code for station or stations producing the ionosonde.
  - `startTimeUTC` string, date-time, required: Sounding Start time in ISO8601 UTC format.
  - `systemInfo` string, required: Names of settings.
  - `systemNotes` string: Details concerning the composition/intention/interpretation/audience/etc. of any data recorded here. This field may contain all of the intended information e.g. info on signal waveforms used, antenna setup, etc. OR may describe the data/settings to be provided in the “data” field.
  - `transmitCoordinates` array[]: List of Geodetic Latitude, Longitude, and Altitude coordinates in km of the receiver. Coordinates List must always have 3 elements. Valid ranges are -90.0 to 90.0 for Latitude and -180.0 to 180.0 for Longitude. Altitude is in km and its value must be 0 or greater.
    - number[]
  - `transmitSensorType` 'Mobile' | 'Static': Enums: Mobile, Static.
  - `receiveCoordinates` array[]: List of Geodetic Latitude, Longitude, and Altitude coordinates in km of the receiver. Coordinates List must always have 3 elements. Valid ranges are -90.0 to 90.0 for Latitude and -180.0 to 180.0 for Longitude. Altitude is in km and its value must be 0 or greater.
    - number[]
  - `receiveSensorType` 'Mobile' | 'Static': Enums: Mobile, Static.
  - `antennaElementPosition` IonoObservationAntennaElementPositionIngest
    - `dimensions` integer[]: Array of integers of the antenna_element dimensions.
    - `dimensionName` string[]: Array of names for dimensions.
    - `data` array[]: Array of 3-element tuples (x,y,z) in km.
      - number[]
  - `antennaElementPositionCoordinateSystem` 'J2000' | 'ECR/ECEF' | 'TEME' | 'GCRF' | 'WGS84 (GEODetic lat, long, alt)' | 'GEOCentric (lat, long, radii)': Enums: J2000, ECR/ECEF, TEME, GCRF, WGS84 (GEODetic lat, long, alt), GEOCentric (lat, long, radii).
  - `power` IonoObservationPowerIngest
    - `notes` string: Notes for the power data.
    - `dimensions` integer[]: Array of integers of the power array dimensions.
    - `dimensionName` string[]: Array of names for dimensions.
    - `data` array[]: Array of received power in db.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
  - `range` IonoObservationRangeIngest
    - `notes` string: Notes for the range data.
    - `dimensions` integer[]: Array of integers of the range array dimensions.
    - `dimensionName` string[]: Array of names for range dimensions.
    - `data` array[]: Array of range data.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
  - `frequency` IonoObservationFrequencyIngest
    - `notes` string: Notes for the frequency data.
    - `dimensions` integer[]: Array of integers of the frequency array dimensions.
    - `dimensionName` string[]: Array of names for frequency dimensions.
    - `data` array[]: Array of frequency data.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
  - `polarization` IonoObservationPolarizationIngest
    - `notes` string: Notes for the polarization data.
    - `dimensions` integer[]: Array of integers for polarization dimensions.
    - `dimensionName` string[]: Array of names for dimensions.
    - `data` array[]: Array of polarization data.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
  - `azimuth` IonoObservationAzimuthIngest
    - `notes` string: Notes for the azimuth data.
    - `dimensions` integer[]: Array of integers of the azimuth array dimensions.
    - `dimensionName` string[]: Array of names for dimensions.
    - `data` array[]: Array of incoming azimuth at the receiver.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
  - `elevation` IonoObservationElevationIngest
    - `notes` string: Notes for the elevation data.
    - `dimensions` integer[]: Array of integers of the elevation array dimensions.
    - `dimensionName` string[]: Array of names for dimensions.
    - `data` array[]: Array of incoming elevation at the receiver.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
  - `restrictedFrequency` number[]: Array of restricted frequencies.
  - `restrictedFrequencyNotes` string: Notes for the restrictedFrequency data.
  - `doppler` IonoObservationDopplerIngest
    - `notes` string: Notes for the doppler data.
    - `dimensions` integer[]: Array of integers of the doppler array dimensions.
    - `dimensionName` string[]: Array of names for dimensions.
    - `data` array[]: Array of received doppler shifts in Hz.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
  - `time` IonoObservationTimeIngest
    - `dimensions` integer[]: Array of integers of the time array dimensions.
    - `dimensionName` string[]: Array of names for dimensions.
    - `notes` string: The notes indicate the scheme and accuracy.
    - `data` array[]: Array of times in number of seconds passed since January 1st, 1970 with the same dimensions as power.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
  - `stokes` IonoObservationStokesIngest
    - `notes` string: Notes for the stokes data.
    - `dimensions` integer[]: Array of integers of the stoke array dimensions.
    - `dimensionName` string[]: Array of names for dimensions.
    - `data` array[]: Array of received stokes data.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
    - `s` number[]: S1, S2, and S3 (the normalized Stokes parameters 1, 2, and 3).
  - `amplitude` IonoObservationAmplitudeIngest
    - `notes` string: Notes for the amplitude data.
    - `dimensions` integer[]: Array of integers for amplitude dimensions.
    - `dimensionName` string[]: Array of names for dimensions.
    - `data` array[]: Array of amplitude data.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
  - `phase` IonoObservationPhaseIngest
    - `notes` string: Notes for the phase data. Orientation and position for each antenna element across the antenna_element dimension.
    - `dimensions` integer[]: Array of integers of the phase array dimensions.
    - `dimensionName` string[]: Array of names for phase dimensions.
    - `data` array[]: Array of phase data.
      - array[]
        - array[]
          - array[]
            - array[]
              - …
  - `foF2` number, double: The ordinary wave critical frequency of the highest stratification in the F region, specified in MHz. URSI ID: 00.
  - `foF1` number, double: The ordinary wave F1 critical frequency, in MHz. URSI ID: 10.
  - `fxF2` number, double: The extraordinary wave F2 critical frequency, in MHz. URSI ID: 01.
  - `fxF1` number, double: The extraordinary wave F1 critical frequency, in MHz. URSI ID: 11.
  - `md` number, double: MUF(D)/foF2.
  - `luf` number, double: Lowest usable frequency.
  - `mufd` number, double: Maximum Usable Frequency for ground distance D in MHz.
  - `fmin` number, double: Lowest frequency at which echo traces are observed on the ionogram, in MHz. URSI ID: 42.
  - `foEs` number, double: Highest ordinary wave frequency at which a mainly continuous Es trace is observed, in MHz. URSI ID: 30.
  - `fminF` number, double: Minimum frequency of F layer echoes in MHz. URSI ID: 80.
  - `fminE` number, double: Minimum frequency of E layer echoes in MHz. URSI ID: 81.
  - `foE` number, double: The ordinary wave critical frequency of the lowest thick layer which causes a discontinuity, in MHz. URSI ID: 20.
  - `fxE` number, double: The extraordinary wave E critical frequency, in MHz. URSI ID: 21.
  - `fxI` number, double: The highest frequency of F-trace in MHz. Note: fxI is with capital i. URSI ID: 51.
  - `hprimeF` number, double: The minimum virtual height of the ordinary wave trace taken as a whole, in km. URSI ID: 16.
  - `hprimeF2` number, double: The minimum virtual height of ordinary wave trace for the highest stable stratification in the F region in km. URSI ID: 4.
  - `hprimeF1` number, double: The minimum virtual height of reflection at a point where the trace is horizontal in the F region in km. URSI ID: 14.
  - `hprimeE` number, double: The minimum virtual height of the normal E layer trace in km. URSI ID: 24.
  - `hprimeEs` number, double: The minimum height of the trace used to give foEs in km. URSI ID: 34.
  - `zmE` number, double: Peak height of E-layer in km. URSI ID: 90.
  - `yE` number, double: Parabolic E layer semi-thickness in km. URSI ID: 83.
  - `qf` number, double: Average range spread of F layer in km. URSI ID: 84.
  - `qe` number, double: Average range spread of E layer in km. URSI ID: 85.
  - `downF` number, double: Lowering of F trace to the leading edge in km.
  - `downE` number, double: Lowering of E trace to the leading edge in km.
  - `downEs` number, double: Lowering of Es trace to the leading edge in km.
  - `ff` number, double: Frequency spread between fxF2 and FxI in MHz. URSI ID: 86.
  - `fe` number, double: Frequency spread beyond foE in MHz. URSI ID: 87.
  - `d` number, double: Distance for MUF calculation in km.
  - `fmuf` number, double: MUF/OblFactor in MHz.
  - `hprimefMUF` number, double: Virtual height at MUF/OblFactor frequency in MHz.
  - `deltafoF2` number, double: Adjustment to the scaled foF2 during profile inversion in MHz.
  - `foEp` number, double: Predicted value of foE in MHz.
  - `fhprimeF` number, double: The frequency at which hprimeF is measured in MHz. URSI ID: 61.
  - `fhprimeF2` number, double: The frequency at which hprimeF2 is measured in MHz. URSI ID: 60.
  - `foF1p` number, double: Predicted value of foF1 in MHz.
  - `foF2p` number, double: Predicted value of foF2 in MHz.
  - `hmF2` number, double: True height of the F2 peak in km. URSI ID: AE.
  - `hmF1` number, double: True height of the F1 peak in km. URSI ID: BE.
  - `hmE` number, double: True height of the E peak in km. URSI ID: CE.
  - `zhalfNm` number, double: True height at half peak electron density in the F2 layer in km. URSI ID: 93.
  - `fminEs` number, double: Minimum frequency of Es layer in MHz.
  - `yF2` number, double: Parabolic F2 layer semi-thickness in km. URSI ID: 94.
  - `yF1` number, double: Parabolic F1 layer semi-thickness in km. URSI ID: 95.
  - `tec` number, double: Total Ionospheric Electron Content *10^16e/m^2. 1 TEC Unit (TECU) = 10^16 electrons/m^2. URSI ID: 72.
  - `scaleHeightF2Peak` number, double: Effective scale height at hmF2 Titheridge method in km. URSI ID: 69.
  - `b0` number, double: IRI thickness parameter in km. URSI ID: D0.
  - `b1` number, double: IRI profile shape parameter. URSI ID: D1.
  - `d1` number, double: IRI profile shape parameter, F1 layer. URSI ID: D2.
  - `foEa` number, double: Critical frequency of night time auroral E layer in MHz. URSI ID: 23.
  - `hprimeEa` number, double: Minimum virtual height of night time auroral E layer trace in km. URSI ID: 27.
  - `foP` number, double: Highest ordinary wave critical frequency of F region patch trace in MHz. URSI ID: 55.
  - `hprimeP` number, double: Minimum virtual height of the trace used to determine foP in km. URSI ID: 56.
  - `fbEs` number, double: The blanketing frequency of layer used to derive foEs in MHz. URSI ID: 32.
  - `typeEs` string: Characterization of the shape of Es trace. URSI ID: 36.
  - `charAtts` IonoObservationCharAttsIngest[]: List of attributes that are associated with the specified characteristics. Characteristics are defined by the CHARS: URSI IIWG format for archiving monthly ionospheric characteristics, INAG Bulletin No. 62 specification. Qualifying and Descriptive letters are defined by the URSI Handbook for Ionogram Interpretation and reduction, Report UAG, No. 23A specification.
    - `ursiID` string: Characteristic's URSI ID. See the characteristic's description for its corresponding URSI ID.
    - `charName` string: Characteristic name. This value should reflect the UDL field name for the corresponding characteristic.
    - `lowerBound` number, double: Specified characteristic's lower bound. Should be less than or equal to the characteristic's current value as set in this record.
    - `upperBound` number, double: Specified characteristic's upper bound. Should be greater than or equal to the characteristic's current value as set in this record.
    - `q` string, char: Qualifying letter (Q) for the characteristic specified by URSI ID. Describes specific ionospheric conditions, beyond numerical values.
    - `d` string, char: Descriptive letter (D) for the characteristic specified by URSI ID. Describes specific ionospheric conditions, beyond numerical values.
    - `climateModelName` string: Name of the climate model.
    - `climateModelOptions` string[]: List of options for the climate model.
    - `climateModelInputParams` string[]: Input parameters for the climate model.
    - `uncertaintyBoundType` string: Uncertainty Bounds (lower and upper) define an interval around reported value that contains true value at the specified probability level. Probability levels are specified in terms of percentile (from 1 to 100) or the standard deviation, sigma (e.g. 1sigma, 2sigma, 3sigma, 5percentile, 10percentile, 25percentile).
  - `height` number[]: Array of altitudes above station level for plasma frequency/density arrays in km (must match the size of the plasmaFrequency and electronDensity Arrays).
  - `plasmaFrequency` number[]: Array of plasma frequencies in MHz (must match the size of the height and electronDensity arrays).
  - `plasmaFrequencyUncertainty` number[]: Uncertainty in specifying the electron plasma frequency at each height point of the profile (must match the size of the plasmaFrequency array).
  - `electronDensity` number[]: Array of electron densities in cm^-3 (must match the size of the height and plasmaFrequency arrays).
  - `electronDensityUncertainty` number[]: Uncertainty in specifying the electron density at each height point of the profile (must match the size of the electronDensity array).
  - `artistFlags` integer[]: Array of Legacy Artist Flags.
  - `traceGeneric` IonoObservationTraceGenericIngest
    - `data` array[]: Multi-dimensional Array. The 1st dimension spans points along the trace while the 2nd dimension spans frequency-range pairs.
      - array[]
        - number[]
    - `dimensionName` string[]: Array of dimension names for trace generic data.
    - `notes` string: Notes for the trace generic data.
  - `tidPhaseSpeeds` number[]: Array of speed in m/s at which the disturbance travels through the ionosphere.
  - `tidAzimuth` number[]: Array of degrees clockwise from true North of the TID.
  - `tidPeriods` number[]: Array of 1/frequency of the TID wave.
  - `datum` IonoObservationDatumIngest
    - `notes` string: Notes for the datum with details of what the data is, units, etc.
    - `data` number[]: Array to support sparse data collections.
  - `platformName` string: Equipment location.
  - `createdAt` string, date-time: Time the row was created in the database, auto-populated by the system.
  - `createdBy` string: Application user who created the row in the database, auto-populated by the system.
  - `updatedAt` string, date-time: Time the row was updated in the database, auto-populated by the system, example = 2018-01-01T16:00:00.123Z.
  - `updatedBy` string: Application user who updated the row in the database, auto-populated by the system.
  - `source` string, required: Source of the data.
  - `origin` string: Originating system or organization which produced the data, if different from the source. The origin may be different than the source if the source was a mediating system which forwarded the data on behalf of the origin system. If null, the source may be assumed to be the origin.
  - `dataMode` 'REAL' | 'TEST' | 'SIMULATED' | 'EXERCISE', required: Indicator of whether the data is REAL, TEST, EXERCISE, or SIMULATED data: REAL: Data collected or produced that pertains to real-world objects, events, and analysis. TEST: Specific datasets used to evaluate compliance with specifications and requirements, and for validating technical, functional, and performance characteristics. EXERCISE: Data pertaining to a government or military exercise. The data may include both real and simulated data. SIMULATED: Synthetic data generated by a model to mimic real-world datasets.
  - `origNetwork` string: The originating source network on which this record was created, auto-populated by the system.

## Response `201`

Success

## Other responses

- `204`: Success
- `400`: Bad Request
- `401`: Invalid/Missing User Credentials
- `403`: User Is Not Authorized
- `405`: Method Not Allowed
- `415`: MediaType Unsupported
- `429`: Rate of Requests Exceeds Allowed Limit
- `500`: Internal Server Error

## Changes

> 12 revisions in range; 1 could not be searched.

- **2025-09-26** `45631f9bb3f0`: 1 breaking
  - the `items/createdBy` request property's minLength was increased from `0` to `1`
- **2025-04-16** `75f764c843a9`: 5 breaking, 4 warning, 4 info
  - request property `items/polarization/data/items/items/items/items/items/items/items/` was restricted to a list of enum values
  - removed the enum value `O` of the request property `items/polarization/data`
  - removed the enum value `X` of the request property `items/polarization/data`
  - the `items/charAtts/items/d` request property format changed from no format to `char`
  - …9 more

[Operation history](https://skmtc.dev/bluestaq/apis/unified-data-library-services-api/changes/udl/ionoobservation/createBulk/post.md)

---

[API](https://skmtc.dev/bluestaq/apis/unified-data-library-services-api.md) - [All operations](https://skmtc.dev/bluestaq/apis/unified-data-library-services-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bluestaq/apis/unified-data-library-services-api/revisions/bd17bc53681e?raw)
