Discussion Ardent Industry API

UPDATE: Ardent Industry is now Ardent Insight!

PLEASE SEE THIS THREAD FOR FUTURE UPDATES.

I'm leaving post below intact for future reference, but all updates relating to Ardent will be on the new thread.




Ardent Industry API & Website​

Last updated: 16 April 2025

www.ardent-industry.com

Source code for website:
https://github.com/iaincollins/ardent-www

Ardent API​

Documentation and source code for the REST API:
https://github.com/iaincollins/ardent-api

Ardent Collector​

Source code for the service that collects data submitted to EDDN and generates reports:
https://github.com/iaincollins/ardent-collector

About this software​

The API was created in part to support further development of new features in the app ICARUS Terminal and because there isn't already an open API for trade data submitted to EDDN by CMDRs and there are no open source platforms.

The service is currently an API only but both a website and integration with ICARUS Terminal are planned.
 
Last edited:
Awesome. Going to have a play with this, and potentially incorporate into EDCoPilot.
Currently i always exclude Fleet Carriers from search results, as no way of reliably knowing if they are dockable or not. (I dont think its in the EDDN feed)
 
Last edited:
Awesome. Going to have a play with this, and potentially incorporate into EDCoPilot.
Currently i always exclude Fleet Carriers from search results, as no way of reliably knowing if they are dockable or not. (I dont think its in the EDDN feed)
Oh hey there, good to hear from you! :)

That's interesting to hear, I feel the same way about Fleet Carriers and only use them for trading if they have high sell prices for a specific item like Tritium or uncommon items (e.g. Thargoid related) as the majority of them time when I get to where a carrier is, it's either locked down or it's moved on. I guess folks using them don't run EDDN clients reliably.

I may set the default in all trade APIs to exclude them, and have a special page / API for fleet carriers, maybe something that works like (even scrapes from?) The Reddit trading site, so folks can more reliably find active carriers.

Super happy to accommodate anything I can for EDCoPilot, please ket me know if you have any request for functionality, trade related or otherwise!
 
Last edited:
Update to say I released the source code today and moved the service from Alpha to Beta.

I have updated the post above to point to that documentation and added some release notes.
 
I've released a very simple and early website at ardent-industry.com which provides a way to browse the data in the API.

It's not especially useful right now but it helps with development and testing of the underlying API.

I've added the link to the website (and the source code) to the post.
 
I know it's still early in design, but it looks great. Thank you for all your hard work both on this and ICARUS.

Is there anything in particular you would like for us to test?
I've loaded it up on a few devices just to see if I could find any issues and the only thing I've noticed is that I don't have a way to make it full screen on Edge for mobile.
 
I know it's still early in design, but it looks great. Thank you for all your hard work both on this and ICARUS.

Is there anything in particular you would like for us to test?
I've loaded it up on a few devices just to see if I could find any issues and the only thing I've noticed is that I don't have a way to make it full screen on Edge for mobile.
Hey thanks for asking!

Hmm I think not much to test in the UI just yet, am ware it's a bit simple and I'm still shaking out some issues to improve performance / add additional missing query options, and stuff like a proper mobile experience is not implemented yet (but should be over the next couple of days).

That's really interesting feedback though, happy to add that as an option - I hadn't even thought about that.

I've been feeling like like probably the best fit for the UX would be maybe not quite as much as "app like" as ICARUS Terminal but maybe a hybrid between that and a website (e.g. so longer pages, with scrolling and regular webpage navigation) but still touch friendly and maybe with a fixed header for easy navigation (although one that uses less space than ICARUS Terminal does) might be a good way to go?

For now I guess interested in feedback on that, and on hearing how folks use it in case I'm missing common scenarios!

e.g. someone pointed out I'm missing the option to filter and display landing pad size (doh!), will include that when I add station information.
 
No single major update, but the web front end for Commodities and Systems is much improved, especially on mobile, and performance and data quality on ardent-industry.com is much better (API's has been zero maintenance and keeps working with zero downtime very nicely).

Station data is the last major missing functionality I want to add to the data, to round off the features for trading (e.g. so can see what size landing pads are at a station, and what state a system is in). Then maybe I'll add a search interface for route planning.

I'm interested in adding exploration data but EDSM does such a great job of that already (fast and reliable) that I may not do that too unless I want to start adding specific features (e.g. tracking lat/long locations of individual player submitted POIs, Plants, etc).
 
Migrated to new hardware platform

Yesterday I migrated everything behind https://ardent-industry.com to new hardware (and to a new provider in the process).

This happened without downtime and went from spinning up a new platform to fully migrating the service in an evening and was uneventful.

  • The CPU, RAM and storage capacity is significantly increased on the new service. Performance gains are x10.
  • Queries that took > 10 seconds are now sub-second. Queries that took seconds are now sub-millisecond.
  • The new service is less expensive than the old service. It's still co-located in the UK but is no longer on AWS Europe/London.

Context

The performance of the previous service was generally good, but relied heavily on diligent use of caching and request optimization to manage performance. There were still occasionally slow performing requests that could occasionally take a few seconds and I was limited in terms of options for optimising to mitigate this because of storage constraints (as a rule storage is cheap, but high performance storage is more expensive).

Critically, the indexes for all databases now fit entirely in RAM, which is a huge boost to performance, are the additional CPU cores.

The new platform relies less on service architecture. The initial implementation used AWS services for managing caching, backups, load balancing, failover and denial of service attacks. The new platform is simpler in terms of system design and is cheaper but the trade off is less fault tolerance and more centralised complexity in the system software. I believe it's worth that trade off for the performance gains in typical usage – for example the new platform is fast enough to not need any caching in front of data and so commodity prices are no longer subject to a delay of up to 5 minutes, although this makes it open to be easier to abuse. It was still possible to get similar performance and retain the benefits of the original platform, but then the trade off is cost (and it would be than I'm willing to commit to for a free service).

What's next

Over the last week or so I've been making small improvements to the information displayed and fixing bugs.

Now that the constrains I was working on are lifted, I'm going to start work on adding in station data and exposing options to filter results (e.g. include/exclude carriers, minimum supply/demand volumes, minimum/maximum pricing, etc) and to perform searches and multi-hop routes.

This should start to make the web based interface actually useful and help inform what might be missing from the Admin APIs.

Once some of the trade specific features are in I'll turn towards exploration.

Request for feedback from developers

The unique aspects to this project - that set it apart from INARA and from EDDB - is that it's open source and that it has a public API, so that it can be integrated into other software, just as EDDN is integrated into so many tools when it comes to sending data.

In that respect I'm hoping it plugs that gap for trade data, and potentially to expand upon what is already possible with the (excellent) EDSM API for exploration.

If you use the API in your software, please do give me a heads up as I am happy to accommodate avoiding breaking changes (and co-ordinating on potentially breaking changes, such as subtle changes in how requests are handled) but I don't know to do that if I don't know if they are in use. :)
 
Last edited:
This weekend I've fixed up some commodity behavior, added station data and a few endpoints I've not documented yet for getting it.

e.g. The API can now return a list of stations for a system, and information about where they are located and the services offered:


There are also endpoints to filter by type, if you are looking for a specific type of of station:


I'm still in the process of wiring it up to update data (like faction owner, system state, etc.) dynamically ... [ ] ... I've not integrated it into the UI or ICARUS Terminal yet but if folks want the raw data dumps they can down nightly SQLlite exports from here:

https://downloads.ardent-industry.com

This data set was created by combining data from EDSM with data from the last data dumps from EDDB and the latest data that comes in from EDDN. The market data took a few weeks to become useful and it might take a little bit to shake out some old / outdated info, I am still pretty confident about having filtering/sorting options in the API and UI by the end of the month.

I'm still undecided on if it want to try and also replicate data in EDSM and Spansh to provide a way to filter and sort on system bodies but am currently inclined to think no because of the cost and effort of storing the data and dealing with inevitable bugs and data quality issues, etc.

Update to above: I kept working on it a bit and actually station services, economy, location, etc. now do update automatically, so it's close to ready for wider use (once the bugs settle, which should be obvious looking at the data over the next few days). Data is augmented from different events to get additional information for each location - this is something that EDDB did but not all sites do but I think is neat and will likely do more of that.

I'm not yet storing system wide information (e.g. faction state, list of factions) but that is pretty straightforward at this point so that will probably be the last thing I do before I move on to making the it easier to access stuff via a UI.
 
Last edited:
It's been a while, but I thought I would bump to say that I had long train journey this week and did a bit of coding on the train. I added filtering for commodity importers and exporters in to the UI, so it's now easier to find trade deals, especially for high value commodities, like Tritium trading between carriers that can be an easy to way to hundreds of millions of credits in an hour.

You can filter by how recent data is, the amount of stock / demand, or explicitly include or exclude fleet carriers.

These are simple options, but combined with the automated recommendations for nearby importers/exporters make it easy for space truckers to find and fulfill credible high value buy orders.

https://ardent-industry.com/commodity/tritium
 
Last edited:
Today has been a bit of a milestone, in that query filtering options for UPDATED (freshness), CARRIERS (include/exclude/only), QUANTITY (T), and DISTANCE (ly) from a LOCATION (System Name) are now supported for Commodity listings, and in a way that allows them to be easily shared via the web, as well as being accessible via the API.

There are also some new system search and market API endpoints, which I'll be documenting along side the new options for CMDRs who are making tools.

As an example of the sort of query you can do, you can do this sort of thing if you want to keep an eye on Tritium supplies on Colonia:

ardent-industry.com/commodity/tritium/exporters?maxDaysAgo=1&minVolume=1&location=Colonia&maxDistance=100

Obviously you can do the same sort of thing with INARA and ESDM and the underlying data should (in theory) be the same across all sites as they are all using EDDN for their data source, but the data is presented and linked in different ways. Ardent actually has the least options in the web UI, but also does the most for you automatically, in terms of how data is presented in context - although, much like the game, how it works might take a bit of getting used to. Additionally, Ardent also provides full data dumps for all the data as well as a public API.

With search endpoints and location aware APIs in place, I'm now just a long weekend away from having features like "Find nearest X" features, guides for interesting POIs and other things in place that I set out to build! I'm looking forward to seeing the nature of the changes to Power Play 2.0 before I build for that, but Power Play support was very much in mind when I started this too (it's been collecting that data, but I want to see if anything changes before I explicit build something around it!).

I expect I will have some significant new features done for around the end of this month, and by the end of the year will get them integrated with ICARUS features one way or another. It would certainly be nice to get back to making ICARUS more useful.

I am still mulling over the idea of porting features over from ICARUS to a standard web and supporting either FDEV account linking or an alternative thin client that could be a sort of "ICARUS 2.0" that would allow me to do some interesting stuff, there are pros and cons to both approaches though, so mulling it over and will see where I land later in the year.
 
Last edited:
Loving this website... Thank you .. thank you!!
Oh that's great to hear, thank you for the feedback!

I'm looking forward to doing more updates, including for points of interest (e.g. megaships and other locations with logs), improvements to searching and viewing systems (maybe borrowing some code from ICARUS Terminal), engineering guides and powerplay. The main thing holding me back right now is that I'm enjoying powerplay and spending more time playing those loops than exploring while tinkering with the code!
 
As an update regarding website / API performance in production, just to flag I'm aware of there being an issue there:

There are still frequent performance issues which cause queries to take multiple seconds to return (this happens a lot of the time). There is very little compute and IO load on server, with most CPU cores sitting < 10%, and RAM usage and disk and network I/O throughput is very low.

Sadly, it seems that bandwidth for servicing is bottlenecked by the upstream provider and there is possibly other performance throttling happening on the VPS. Total network output it's sometimes throttled to lower than 200 KiB/s and performance is constrained despite IO, CPU and other resources being barely utilized. At other times it's fine, but issues have been happening more and more.

I'm probably going to have to look at moving it to a new provider if I want to solve for that; it's currently on a cheap hosting plan and it's one of those "you get what you pay for" situations. I might look at getting creative with caching as that would require more time/effort on my part but continue to make it cheap to run and greatly improve performance for common queries.
 
Last edited:
As low effort mitigation, I'm going to cap trade data for commodities by automatically having it delete commodity trade data that older than one year. If anyone objects and has a use case for this please let me know and I can restore it folks really want it and have a use for it.

This will bring the number of commodity buy/sell orders being tracked down from about 52 million entries to 37 million which will go some way to mitigate spikes in throughput on the VPC but more significantly will make it easier to keep the entire Trade DB cached in RAM which will make huge difference to performance, even with VPS volatility.

I could be smarter about this, I'm just being a bit lazy and cheap and this feels like a decent trade off - I think spending time on other features would be much more useful / interesting that optimizing to accommodate keeping around large volumes of old trade data.
 
Update: Commodities data older than 365 will now be expired automatically from the database each day.

Note: Data for Systems, Stations, Locations (etc) will not be impacted and is still kept indefinitely and is not impacted - because of the much simpler way that data is queried it is already highly performant; it's only trade data that needs to support being queried in more complex and flexible ways.

Trade data is kept permanently cached in memory as a result of this change. The trade database is currently around 18 GB and the Virtual Private Server only has access to 22 GB of RAM so trimming off 15 million old entries will give it much more headroom to accommodate all the trade data and still have room to expand as well as to keep other data in memory as needed. The total required RAM use for all the processes on the server is under 2 GB, with the actual Ardent services using < 150 MB so almost all the RAM is available for caching data.

This visualization from the moment the change was deployed shows how the trade database currently just fits entirely in the availed space (the middle graph, in blue), and the headroom below (shown in the lowest graph, in green) will increase after old data is automatically purged in a few hours.

1737079471520.png


Even if the data grows too large over time it won't cause any problems beyond slower query performance - it will just fall back to relying to reading and writing only from the NVMe drive for parts of the database that don't fit into RAM (i.e. worst case it would get slower again).

If the trade database grows considerably in size in the future - for example due to a sustained increase in player activity and/or new systems coming online with powerplay - then I can look at further optimizing how data is stored (time consuming...) or I could increase the memory on the server (which costs money...) or I can just lower the threshold for trade data from 1 year to something like 6 months or even just 90 days (much easier and free; it's already a config option).

Issues with performance have been hanging over me for a while. It got worse as more data started coming in due to the uplift in player activity. I've been reluctant to move on to work on other features before feeling it was resolved. Combined with other changes made recently to reduce the impact of bots on the server this will resolve any performance jitter and keep it consistently fast - even if the total network throughput can be spotty - and I can focus on feature work on Ardent + ICARUS Terminal again!
 
Last edited:
Following the Trailblazers update to the game and the desire to have a better way of finding commodities needed for building out new stations and settlements, I've rolled out some improvements to how commodities are displayed and the search interface for them on the website.

With the new UI, filtering options are persisted when changing which specific commodity is being filtered on and some of the default options have changed to make it quicker and easier to find where to buy - or sell - items.

Additional updates are planned this week, related to further improvements to searching for commodities, viewing systems and other features, including specific functionality for system colonisation gameplay.

The API itself hasn't changed for this, but I do plan some additional additive improvements specifically around system colonisation.

Screenshot 2025-03-16 at 2.56.02 pm.png
Screenshot 2025-03-16 at 2.55.50 pm.png
 
I don't want to spam the forums with too many updates, but I refined it a little bit and wrote a bit more about the update and plans for the future in this post on Reddit:
Source: https://www.reddit.com/r/EliteDangerous/comments/1jdi72r/ardent_industry_trade_data_explorer_new_feature/
Pfft.. I'd say go for it if you've got updates.

I tried to use this but the details for commodities kept pushing me to ports that were farther than I wanted to go. I ended up scouting via Inara.
 
Back
Top Bottom