This is an old revision of the document!
The C++ API contains the TrackAPI, which is useful for tracking applications. There isn't a lot of functionality, and the API is minimal in order to accomplish base tasks. It is possible that this API is extended in the future (e.g. later than mid-2015).
The API allows an application to list tracks, trackers (more is needed), and track positions. Using the StorageServer object, the application requests an instance of the TrackAPI.
class ITrackApi {
 public:
  virtual ~ITrackApi(void) {}
   Downloads GPS positions from the server according to the
   following arguments:
  
   serial    - The serial number of the GPS device
   start     - The time of the first GPS position
   end       - The time of the last GPS position
   allFields - Flag controlling which fields are retrieved.
               true: Retrieves all fields listed in the GpsPos class
               false: Retrieves only time, latitude and longitude
   cb        - The function called for each downloaded position
   clientp   - A pointer to client data passed to the callback function.
  virtual AccessError download(const std::string& serial, 
              int start, 
              int end,
              bool allFields,
              PositionCallback cb, 
              void *clientp) = 0;
   Uploads GPS positions to the server according to the
   following arguments:
  
   serial   - The serial number of the GPS device
   count    - The number of GPS positions
   points   - An array of GPS positions
   uploaded - The number of points that were successfully uploaded.
              This value will only be less than than the number of points
              passed in if an error occurs.
  virtual AccessError upload(const std::string& serial, 
              int count, 
              GpsPos* points, 
              int* uploaded) = 0;
   Retrieves the list of tracks from the server according to
   the following arguments:
  
   serial  - The serial number of the device that created the track.
             Use the #define ALL_DEVICES to download tracks from all devices.
   project - The handle of the project containing the tracks.
             Use the #define ALL_PROJECTS to download tracks from all projects.
   tracks  - The list the retrieved tracks will be added to. 
  virtual AccessError getTracks(const std::string& serial,
              int project,
              TrackList& tracks) = 0;
   Moves a track to a project.
  
   track   - The handle of the track to move.
   project - The handle of the destination project.
   result  - A pointer to a track instance to store the result.
             If the argument is null, no track is returned.
  virtual AccessError moveTrack(int track, int project, Track* result) = 0;
   Deletes a track from the server.
  
   handle - The handle of the track to be deleted.
  virtual AccessError deleteTrack(int handle) = 0;
   Returns the list of device serial numbers the server knows about
   for the customer. These include devices that are explicitly assigned
   to the customer and devices that have uploaded data.
  
   serials - The list the retrieved serial numbers will be added to.
  virtual AccessError getSerialNumbers(SerialList& serials) = 0;
 protected:
  ITrackApi(void) {}
 private:
  ITrackApi(const ITrackApi& api);
  ITrackApi& operator=(const ITrackApi& api);
};