Language

Detailed step-by-step explanations for Pléiades & SPOT tasking

Step 1: Authenticate

Using you API Key, you will need to get an access token that enables authorization. Authorization refers to the process of determining what permissions an authenticated client has for a set of resources.
For security reasons this access token expires regularly then it’s necessary to renew the authentication process to get a new one.
Please refer to the dedicated Authentication Guide

Step 2: AOI Tutorial

For any request over a location you will be asked to define an AOI (Area Of Interest). This AOI definition follows the requirement of GeoJSON specifications, which is an open standard format designed for representing simple geographical features. The specified AOI must always have a GeoJSON geometric type (Polygon, Point, LineString, etc) and coordinates. The only supported type in our case is Polygon, which defines a shape composed by straight lines.

The coordinates of the polygon are an array of points defined by latitude and longitude. They must follow certain rules:

  • The first and last point are the same

  • The points define the outline of the shape. Complex shapes with multiples points are accepted up to 999 vertices.

  • Each AOI must have at least 4 coordinates (triangle)

  • An AOI with a “hole” inside (donut shape) is forbidden.

    Forbidden donut shape aoi

  • The order of the points is important. Each line defined between two consecutive points must not intersect with any other line of the polygon.

    • {“type”:“Polygon”,“coordinates”:[[[2.0,1.0],[1.0,1.0],[1.0,2.0],[2.0,2.0],[2.0,1.0]]]} is good

      Allowed shape aoi

    • {“type”:“Polygon”,“coordinates”:[[[2.0,1.0],[1.0,2.0],[1.0,1.0],[2.0,2.0],[2.0,1.0]]]} is not good

    Forbidden shape aoi with intersection

If you need to use a map to draw your AOI, you may use the AOI manager that is available within the OneAtlas platform. It allows a user to draw complex shapes and export the coordinates in many different formats that may suit your needs.

AOI manager menu

Step 3: Check Feasibility

The following request returns an automatic feasibility study result for the requested tasking. This allows to:

  • know if the request needs to go through manual feasibility study (AUTOMATIC or MANUAL)

  • get the ‘difficulty’ of your request in case of a OnePlan automatic request (EASY or CHALLENGING with an impact on price)

ProgTypeNames can be:

  • For Pléiades Neo: ONEPLAN, ONEDAY, ONENOWATTEMPTS, ONENOWWEATHER

  • For SPOT & Pléiades: ONEPLAN

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/feasibility
REST verbPOST
AuthenticationBearer token

Body request sample:

 {
  "acquisitionDate": {
    "endDate": "2021-06-11T23:59:59.999Z",
    "startDate": "2021-05-12T11:03:19.052Z"
  },
  "contractId": "<CisContractId>",
  "missions": [
    "PLEIADES"
  ],
  "optical": {
    "acquisitionMode": "MONO",
    "maxCloudCover": 10,
    "maxIncidenceAngle": 50
  },
  "progTypeNames": [
    "ONEPLAN"
  ],
  "aoi": {
    "type": "Polygon",
    "coordinates": [
      [
        [
          1.4316558837890625,
          43.568824930165476
        ],
        [
          1.4316558837890625,
          43.601900054609445
        ],
        [
          1.4670181274414062,
          43.601900054609445
        ], 
        [
          1.4670181274414062,
          43.568824930165476
        ],
        [
          1.4316558837890625,
          43.568824930165476
        ]
      ]
    ]
  }
}

Response

{
"progCapacities": [
        {
            "mission": "PLEIADES",
            "progTypes": [
                {
                    "name": "ONEPLAN",
                    "mission": "PLEIADES",
                    "feasibility": {
                        "classification": "CHALLENGING",
                        "automation": "AUTOMATIC",
                        "automationName": "AutomaticTasking30"
                    },
                    "available": true
                }
            ]
        }
    ]
}

classification, automation and automationName will be needed later.

If the automation is “MANUAL” a feasibility study will be needed. A feasibility study is a diagnosis performed by our tasking experts in order to organise the acquisition plan and estimate the confidence in covering the area of interest within the defined acquisition period and parameters. To study the feasibility of the tasking request, we ask the customer: where, by when and for which application the customer needs the new collection(s). With this information, the Tasking Team issues a tasking proposal.

Step 4: Get Attempts

Note: This step is only mandatory (and available) for ONEDAY and ONENOW.

This API allows to get the first possible attempts matching your criteria, within a 7-day timeframe from the defined start date.
Start date can be set at any time. Note that if you try to set it in the past, the value will be replace by the current date.

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/attempts
REST verbPOST
AuthenticationBearer token

Body request sample:

{
    "progTypeNames": [
        "ONEDAY"
    ],
    "missions": [
        "PLEIADES"
    ],
    "contractId": "<CisContractId>",
    "acquisitionDate": {
        "startDate": "2021-04-16T00:16:26.665Z",
        "endDate": null
    },
    "optical": {
        "acquisitionMode": "MONO",
        "maxCloudCover": 25,
        "maxIncidenceAngle": 30
    },
    "aoi": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.3763809204101562, 43.545313140623726],
                [1.5095901489257812, 43.545313140623726],
                [1.5095901489257812, 43.656198305413156],
                [1.3763809204101562, 43.656198305413156],
                [1.3763809204101562, 43.545313140623726
]
            ]
        ]
    }
}

Response example

{
    "progCapacities": [
        {
            "mission": "PLEIADES",
            "progTypes": [
                {
                    "name": "ONEDAY",
                    "mission": "PLEIADES",
                    "segments": [
                        {
                            "id": "PHR1",
                            "footprint": {
                                "geometry": "POLYGON((1.298502 43.665978, 1.298175 43.535609, 1.589621 43.53495, 1.589271 43.665975, 1.298502 43.665978, 1.298502 43.665978))",
                                "center": "POINT(1.444014 43.600603)"
                            },
                       "instrumentMode": "THR",
                       "orderDeadline": "2021-05-31T02:55:00.099Z",
                       "extendedAngle": false,
                       "acquisitionStartDate": "2021-05-31T11:10:44.099Z",
                       "acquisitionEndDate": "2021-05-31T11:10:45.552Z",
                       "incidenceAngle": 26.3,
                       "segmentKey": "ea60293f38ee6de7542b51f8028bab3244de9e25b9dcb8c7d94095c14ca29d70dbbe78c03462eff457763bc8551c5b66dc0852688bbfd731f7e3e2b00b451e37::[{\"key\":\"acqPeriod\", \"value\":\"2021-05-31T11:10:44.099Z 2021-05-31T11:10:45.552Z\"},{\"key\":\"extendedAngle\", \"value\":false},{\"key\":\"geometryWkt\", \"value\":\"POLYGON((1.298502 43.665978, 1.298175 43.535609, 1.589621 43.53495, 1.589271 43.665975, 1.298502 43.665978, 1.298502 43.665978))\"},{\"key\":\"orderDeadLine\", \"value\":\"2021-05-31T02:55:00.099Z\"},{\"key\":\"maxCloudCover\", \"value\":\"25.0\"},{\"key\":\"maxIncidenceAngle\", \"value\":\"30.0\"}]",
                            "acrossTrackIncidenceAngle": 25.609364414413804
                        },{other possibilities…},
"available": true}] }]}

<segmentKey> will be needed later.

You will receive an error message similar to the following if the AOI size is not correct. Example:

{
  "progCapacities": [
    {
      "mission": "PLEIADES",
      "progTypes": [
        {
          "name": "ONEDAY",
          "mission": "PLEIADES",
          "errors": [
            {
              "code": "ERR_MIN_AOI_AREA",
              "locator": "AOI",
              "message": "24.5"
            }
          ],
          "segments": [],
          "available": false
        }
      ]
    }
  ]
}                      

Step 5: Calculate Price

Note: Price can be calculated ONLY for orders that does not require feasibility study - meaning either archive or AUTOMATIC tasking

It allows to calculate the price for a tasking.

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/prices
REST verbPOST
AuthenticationBearer token

The segmentKey is the segmentKey value of the selected acquisition from the attempt request.
For options you have to add all the <key,value> categories mandatories from the options endpoint response with the chosen productTypeId. Please refer to the dedicated Get production options

Body request sample Pléiades Tasking OneDay:

{
    "aoi": [
        {
            "id": 1,
            "name": "PHR 1",
            "geometry": {
                "type": "Polygon",
                "coordinates": [[[1.3763809204101562,43.545313140623726 ],[ 1.5095901489257812,43.545313140623726],[1.5095901489257812,43.656198305413156],[1.3763809204101562,43.656198305413156],[1.3763809204101562,43.545313140623726]]]
            }
        }
    ],
    "programReference": null,
    "contractId": "<CisContractId>",
    "items": [
        {
            "productTypeId": "PleiadesTaskingOneDay",
            "aoiId": 1,
            "properties": [
                {
                    "key": "extendedAngle",
                    "value": true
                },
                {
                    "key": "comments",
                    "value": "Pleiades OneDay"
                }
            ],
            "comments": "your comment",
            "segmentKey": "<segmentKey>"
        }
    ],
    "primaryMarket": "NQUAL",
    "secondaryMarket": null,
    "customerReference": "unique customer reference",
    "optionsPerProductType": [
        {"productTypeId": "PleiadesTaskingOneDay",
            "options": [
                {
                    "key": "spectral_processing",
                    "value": "pansharpened_natural_color"
                },
                {
                    "key": "radiometric_processing",
                    "value": "basic"
                },
                {
                    "key": "image_format",
                    "value": "dimap_jpeg2000_regular"
                },
                {
                    "key": "pixel_coding",
                    "value": "8bits"
                },
                {
                    "key": "processing_level",
                    "value": "ortho"
                },
                {
                    "key": "projection_1",
                    "value": "4326"
                },
                {
                    "key": "licence",
                    "value": "standard"
                },
                {
                    "key": "dem",
                    "value": "best_available"
                }
            ]
        }
    ],
    "delivery": {
        "type": "network",
        "workspace": "<workspaceId>"
    }
}

Response Pléiades Tasking OneDay

{
    "contractId": "<CisContractId>",
    "currency": "EUR",
    "discountPercentage": 0.0,
    "discountValue": 0.0,
    "productTypes": [{
            "amount": 7392.0,
            "areaKm2": 132.0,
            "discountPercentage": 0.0,
            "discountValue": 0.0,
            "price": 7392.0,
            "productTypeId": "PleiadesTaskingOneDay",
            "items": [{datastripIds": []}
            ],
            "voucherCode": null}],
    "totalAmount": 7392.0 
}

Body request sample Spot Tasking OnePlan

Use feasibilityAutomation ,feasibilityAutomationName and classification from the feasibility response.

{
"aoi": [
    {
     "id": 1,
     "name": "Polygon 1",
     "geometry": {
         "type": "Polygon",
         "coordinates": [ [[ 1.4316558837890625, 43.568824930165476],[ 1.4316558837890625, 43.601900054609445],[ 1.4670181274414062, 43.601900054609445],[ 1.4670181274414062, 43.568824930165476],[ 1.4316558837890625, 43.568824930165476] ] ]
            }
        }
    ],
    "contractId": "<CisContractId>",
    "items": [
        {
            "productTypeId": "SpotTaskingOnePlan",
            "dataSourceIds": [],
            "aoiId": 1,
            "properties": [

                {
                    "key": "acquisitionMode",
                    "value": "MONO"
                },
                {
                    "key": "classification",
                    "value": "CHALLENGING"
                },
                {
                    "key": "feasibilityAutomation",
                    "value": "AUTOMATIC"
                },
                {
                    "key": "notificationThreshold",
                    "value": 25
                },
                {
                    "key": "maxCloudCover",
                    "value": 10
                },
                {
                    "key": "maxIncidenceAngle",
                    "value": 50
                },
                {
                    "key": "acqPeriod",
                    "value": "2021-06-18T09:04:16.284Z 2021-07-18T23:59:59.999Z"
                },
                {
                    "key": "comments",
                    "value": "comment"
                },
                {
                    "key": "feasibilityAutomationName",
                    "value": "AutomaticTasking30"
                }
            ],
            "comments": "comment"
        }
    ],

    "customerReference": "customer reference",
    "optionsPerProductType": [
        {
            "licence": "",
            "productTypeId": "SpotTaskingOnePlan",
            "options": [
 see PleiadesTaskingOneDay options
            ]
        }
    ]
}

Spot Tasking OnePlan price response

{
    "contractId": "<CisContractId>",
    "currency": "EUR",
    "discountPercentage": 0.0,
    "discountValue": 0.0,
    "productTypes": [
        {
            "amount": 690.0,
            "areaKm2": 500.0,
            "discountPercentage": 80.0,
            "discountValue": 0.0,
            "price": 3450.0,
            "productTypeId": "SpotTaskingOnePlan",
            "items": [{"datastripIds": []}],
            "voucherCode": null
        }
    ],
    "totalAmount": 690.0
}

Step 6: Request a quotation

Note: This feature is only available for Pléiades Neo.

Step 7: Create an order

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/orders
REST verbPOST
AuthenticationBearer token
"delivery": {
        "type": "network",
        "workspace": "<workspaceId>"
        "notifications": [
        {
          "name": "",
          "channels": [
            {
              "type": "email",
              "parameters": {
                "addresses": [
                  "my_mail@domain.com"
                ]
              }
            }
          ],
          "filter": {
            "events": [
              "ACQUISITION_RECEIVED"
            ]
          }
        }
      ],

Body request sample:

{
  "aoi": [
    {
      "id": 1,
      "name": "Polygon 1",
      "geometry": {
         "type": "Polygon",
        "coordinates": [[ [ 120.488026159467253, -24.571714292158521, 0.0 ], [ 120.491482765150906, -24.733310607869488, 0.0 ], [ 120.66527496805864, -24.729593127593393, 0.0 ], [ 120.661818362374987, -24.567996811882427, 0.0 ], [ 120.488026159467253, -24.571714292158521, 0.0 ] ]]
      }
    }
  ],
  "programReference": null,
  "contractId": "<CisContractId>",
  "items": [
    {
      "notifications": [
        {
          "name": "",
          "channels": [
            {
              "type": "email",
              "parameters": {
                "addresses": [
                  "my_mail@domain.com"
                ]
              }
            }
          ],
          "filter": {
            "events": [
              "ACQUISITION_RECEIVED"
            ]
          }
        }
      ],
      "productTypeId": "PleiadesTaskingOneNow",
      "dataSourceIds": [

      ],
      "aoiId": 1,
      "properties": [
        {
          "key": "extendedAngle",
          "value": true
        },
        {
          "key": "maxCloudCover",
          "value": 10
        },
        {
          "key": "orderDeadLine",
          "value": "2020-06-19T03:30:00.899Z"
        },
        {
          "key": "comments",
          "value": "check if properties relevant between segmentKey"
        },
        {
          "key": "acqPeriods",
          "value": "2020-06-19T10:05:54.899Z 2020-06-19T10:05:56.150Z,2020-06-20T09:58:50.299Z 2020-06-20T09:58:51.550Z,2020-06-21T10:39:32.899Z 2020-06-21T10:39:34.150Z"
        }
      ],
      "comments": "API",
     "segmentKey": "<segmentKey>"
    }
  ],
  "primaryMarket": "NQUAL",
  "secondaryMarket": null,
  "customerReference": "unique customer reference",
  "optionsPerProductType": [
    {
      "licence": "",
      "productTypeId": "PleiadesTaskingOneNow",
      "options": [
        {
          "key": "spectral_processing",
          "value": "bundle"
        },
        {
          "key": "radiometric_processing",
          "value": "display"
        },
        {
          "key": "image_format",
          "value": "dimap_geotiff"
        },
        {
          "key": "pixel_coding",
          "value": "8bits"
        },
        {
          "key": "processing_level",
          "value": "ortho"
        },
        {
          "key": "projection_1",
          "value": "4326"
        },
        {
          "key": "licence",
          "value": "eula_5"
        },
        {
          "key": "dem",
          "value": "best_available"
        }
      ]
    }
  ],
  "delivery": {
    "type": "network",
    "workspace": "<workspaceId>"
  }}


Notes:

  • productTypeId can be retrieved using Get product types

  • Please refer to the dedicated Get production options for processing options

  • classification and feasibilityAutomation are the results of the feasibility study step.

  • For OneDay offer, notificationThreshold and maxCloudCover will not be considered and forced to 100%

  • Dem and projection are not mandatory for primary, Dem is not mandatory for projected

Response

{
    "salesOrderId": " salesOrderId ",
    "currency": "EUR",
    "discountPercentage": 0,
    "discountValue": 0,
    "totalAmount": 20790
}

Step 8: Get your imagery product

Once delivered, the acquisition will be placed in your private workspace. You can run this request to access these images:

API Endpointhttps://search.foundation.api.oneatlas.airbus.com/api/v2/opensearch?workspaceid=<workspace-Id>
REST verbGET
AuthenticationBearer access token

Each image is returned as a GeoJSON feature under the /features[] property.

Track your orders

You can see all your tasking orders thanks to this request:

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/contracts/<cisContractId>/taskings
REST verbGET
AuthenticationBearer access token

To see the status of a dedicated tasking, you can use the following endpoint after having retrieved the <taskingId>, available in the email notification under ICR_ID.

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/contracts/<cisContractId>/taskings<taskingId>
REST verbGET
AuthenticationBearer access token


Reference:

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/contracts/<cisContractId>/taskings?customerRef=yourCustomerReference
REST verbGET
AuthenticationBearer access token

You will receive the following:

{
    "taskings": [
        {
            "sal": "SALXXXXXX",
            "so": "SOXXXXX",
            "icr": {
                "id": "ICR_FC_XXXXX",
                "aoi": {
                    "type": "Polygon",
                    "coordinates": [
                        [
                            [
                                122.680848001114,
                                -24.4983000806924
                            ],
                            [
                                122.837192701615,
                                -24.494335091697
                            ],
                            [
                                122.834119286537,
                                -24.3386542248409
                            ],
                            [
                                122.6804797677,
                                -24.3373016179506
                            ],
                            [
                                122.680848001114,
                                -24.4983000806924
                            ]
                        ]
                    ]
                },
                "progTypeName": "OneDay",
                "status": "Completed",
                "nbProposedSegments": 0,
                "nbTotalSegments": 0,
                "period": {
                    "startDate": "2021-03-03T01:54:44Z",
                    "endDate": "2021-03-03T02:24:47Z"
                },
                "seriesInformation": null,
                "customerRef": "customer ref",
                "taskingProgress": {
                    "orderedArea": 275718686.400068,
                    "validatedArea": 0.0
                },
                "attempts": "2021-03-03T02:09:44.999Z 2021-03-03T02:09:47.001Z"
            }} ]
}

Stereo and tristereo specificities

  • STEREO and TRISTEREO options are available for OnePlan only for SPOT and Pléiades sensors.
  • STEREO and TRISTEREO requires manual feasibility. Each order passed will go through manual feasibility process. It shall be confirmed manually by the requester once the study has been performed before being converted as an effective order.
  • In the request payload, within items/properties:
    • acquisitionMode can be set to “STEREO” or “TRISTEREO”
    • the key “acquisitionModeMinBH” must be present and its value set as a string between “0.2” and “0.8”
    • the key “acquisitionModeMaxBH” must be present and its value set as a string between “0.2” and “0.8”
  • Available production options can be displayed using the Get production options endpoint

bh-details


Request example (to the order endpoint)

{
  "aoi": [
    {
      "id": 1,
      "name": "Polygon 1",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              -42.49931262834877,
              20.92430224367932
            ],
            [
              -42.40303112165122,
              20.92430224367932
            ],
            [
              -42.403059936210546,
              20.834370239032097
            ],
            [
              -42.499283813789454,
              20.834370239032097
            ],
            [
              -42.49931262834877,
              20.92430224367932
            ]
          ]
        ]
      }
    }
  ],
  "contractId": "<CisContractId>",
  "items": [
    {
      "productTypeId": "SpotTaskingOnePlan",
      "aoiId": 1,
      "properties": [
        {
          "key": "acqPeriod",
          "value": "2023-10-14T13:29:57.299Z 2023-12-14T13:29:59.073Z"
        },
        {
          "key": "comments",
          "value": "This is a custom comment"
        },
        {
          "key": "feasibilityAutomation",
          "value": "MANUAL"
        },
        {
          "key": "acquisitionMode",
          "value": "TRISTEREO"
        },
        {
          "key": "classification",
          "value": "EASY"
        },
        {
          "key": "acquisitionModeMinBH",
          "value": "0.2"
        },
        {
          "key": "acquisitionModeMaxBH",
          "value": "0.8"
        },
        {
          "key": "maxIncidenceAngle",
          "value": 50
        }
      ],
      "holdback": false
    }
  ],
  "customerReference": "My tristereo reference",
  "primaryMarket": "NQUAL",
  "optionsPerProductType": [
    {
      "productTypeId": "SpotTaskingOnePlan",
      "options": [
        {
          "key": "spectral_processing",
          "value": "bundle"
        },
        {
          "key": "radiometric_processing",
          "value": "reflectance"
        },
        {
          "key": "image_format",
          "value": "dimap_jpeg2000_regular"
        },
        {
          "key": "pixel_coding",
          "value": "12bits"
        },
        {
          "key": "processing_level",
          "value": "primary"
        },
        {
          "key": "licence",
          "value": "standard"
        },
        {
          "key": "delivery_method",
          "value": "on_the_flow"
        },
        {
          "key": "priority",
          "value": "standard"
        }
      ]
    }
  ],
  "endUsers": [
    {
      "endUserName": "John Doe",
      "country": "FR"
    }
  ]
}

Retrieve acquisitions on an order

Note: Pléiades and SPOT are working at segment level while Pléiades Neo at coverage item (1 coverage item is by default a scene equivalent)

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/contracts/<CisContractId>/taskings/<taskingId>/segments
REST verbGET
AuthenticationBearer access token

Response:

{
    "segments": [
        {
            "id": "AS_FC_XXXX_1_2",
            "status": "Proposed",
            "asDetail1": {
                "catalogId": "DS_PHR1B_XXXXXX",
                "footprint": {
                    "type": "Polygon",
                    "coordinates": 
                },
                "incidenceAngle": 15.1072,
                "clearSkyRate": 88.8973,
                "acquisitionDate": "2021-04-18T10:53:38Z"
            }}]
}

Export SegmentId

Accept or refuse an acquisition

Once an order is confirmed, users can begin requesting information about the progress of their requests. For example, if you have tasked OnePlan, every time a validated acquisition is made of your AOI, then the percentage of completion of your tasking is updated accordingly. You can also accept or reject new acquisitions. During the tasking observation period, proposed acquisitions become available. Proposed acquisitions are recently acquired images, which are close to the requested criteria but don’t perfectly match them. For example, the proposed acquisition might have more cloud coverage than you initially specified. In this case, the customer has two possibilities: Validate the acquisition or reject the acquisition.

Note: Pléiades and SPOT are working at segment level while Pléiades Neo at coverage item (1 coverage item is by default a scene equivalent)

You can then accept an acquisition thanks to the following request:

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/contracts/<CisContractId>/taskings/<tasking_Id>/segments/<segmentId>/accept
REST verbPOST
AuthenticationBearer access token

You can refuse a acquisition thanks to this one:

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/contracts/<CisContractId>/taskings/<taskingId>/segments/<segmentId>/refuse
REST verbPOST
AuthenticationBearer access token

Cancel a tasking order

You have the possibility to cancel the tasking until 12 hours before the start of your tasking window using:

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/contracts/<contractId>/taskings/<ICR_ID>/cancel
REST verbPOST
AuthenticationBearer access token

ICR_ID information can be retrieved from Track your orders

contractId information can be retrieved from Contract-related information

Stop a tasking order

This feature is only available for OneNow. You have the possibility to stop the tasking after 12 hours before the start of your tasking window using:

API Endpointhttps://order.api.oneatlas.airbus.com/api/v1/contracts/<contractId>/taskings/<ICR_ID>/stop
REST verbPOST
AuthenticationBearer access token

ICR_ID information can be retrieved from Track your orders

contractId information can be retrieved from Contract-related information

Note: Acquisitions already done - and within acceptance criteria - will be invoiced

Manage quotations

Note: This feature is only available for Pléiades Neo.

Contact Us