Third Party Developer Blog

Oct
8

Mining Ledgers in ESI

Team Tech Co | 2017-10-08 00:00

This blog post is part of a series of blogs examining best practices for ESI development. Each blog will be published on the 8th of each month during the journey towards XML API and CREST’s termination date. The legacy APIs will be terminated on May 8th, 2018, or earlier if metrics signal a trivial level of usage.


Moon mining is coming to EVE Online on October 24th in the Lifeblood expansion and, for the first time ever, new ESI endpoints will accompany this new feature's release! The new endpoints will be onlined a few hours after downtime on October 24th for Tranquility. We have already released revamped moon mining onto our test server, Singularity, along with the mining ledger ESI endpoints so that you can begin making software for this feature now.

There are three new endpoints to accompany mining ledgers. Let's look a bit closer at each endpoint and how to use them.

Personal Mining Ledgers

There is one endpoint in ESI connected to personal mining ledgers:

GET /v1/characters/{character_id}/mining/

Cache time: 600 seconds (10 minutes)

Required scope: esi-industry.read_character_mining.v1

Pagination: 1000 results per page, returns X-pages HTTP header

With the addition of revamped moon mining in EVE, every mineral you mine will now be recorded into mining ledgers. This endpoint allows you to look at your character's personal mining ledger history for the past 90 days.

Example

First get an access token with the esi-industry.read_character_mining.v1 scope. Make sure to use the SSO base URL https://sisilogin.testeveonline.com if you're doing this against Singularity.

Then, make the following call and replace {character_id} with your character ID and {access_token} with the access token you received:

$ curl --header "Accept: application/json" --header "Authorization: Bearer {access_token}" https://esi.tech.ccp.is/v1/characters/{character_id}/mining/?datasource=singularity

Note: the datasource parameter in this example is only needed when getting data from Singularity before the Lifeblood expansion is released.

Here's a look at an example response for this endpoint:

[
    {
        "date": "2017-09-21",
        "solar_system_id": 30002537,
        "type_id": 1227,
        "quantity": 5092
    },
    {
        "date": "2017-09-22",
        "solar_system_id": 30002537,
        "type_id": 1227,
        "quantity": 408
    },
    {
        "date": "2017-09-23",
        "solar_system_id": 30002537,
        "type_id": 1227,
        "quantity": 1872
    },
    {
        "date": "2017-09-24",
        "solar_system_id": 30002537,
        "type_id": 1227,
        "quantity": 432
    },
    {
        "date": "2017-09-21",
        "solar_system_id": 30002537,
        "type_id": 1228,
        "quantity": 1000
    },
    {
        "date": "2017-09-21",
        "solar_system_id": 30002538,
        "type_id": 1227,
        "quantity": 1000
    }
]

As you can see, mining ledger quantities are aggregated per unique combination of date, solar_system_id and type_id.

You can get more info on the given solar_system_id by dropping it into the /universe/system/{system_id}/ endpoint. You can also drop the given type_id into the /universe/types/{type_id}/ endpoint to see more details on the mineral that was mined.

Corporation Mining Ledgers

The corporation mining ledger endpoints in ESI exist to allow a corporation to track the mining of asteroids that are being observed by a corporation's Upwell Refineries. They do not give the ability to monitor what each member in a corporation is mining. To better understand this "observer" concept, let's look at how moon mining will work on a corporation level in-game:

  • A corporation deploys a Upwell Refinery close to a moon.
  • The refinery is then fitted with a special moon drilling service module (only one refinery per moon can be fit with a moon drilling module).
  • The moon drilling module blasts a chunk of the moon away from its surface and drags it towards the structure. This process takes between one and several weeks.
  • Once the chunk of the moon is close enough to the refinery it will be blasted into a small asteroid field which can then be mined.
  • The refinery itself will observe who mines this asteroid field and update its mining ledger.

If you would like a deeper understanding of Upwell Refineries you can read this blog.

ESI exposes two endpoints that are connected to corporation mining ledgers:

GET /corporation/{corporation_id}/mining/observers/

Cache time: 3600 seconds (1 hour)

Required scope: esi-industry.read_corporation_mining.v1

Required role: Accountant

Pagination: 1000 results per page, returns X-pages HTTP header

This endpoint exists to list all of your corporation's structures capable of observing moon mining and keeping ledgers. In this case, the list of observers will be a list of Upwell Refineries that a corporation owns which have mining events. Refineries with no mining events will not be shown on this list.

Example

First get an access token with the esi-industry.read_corporation_mining.v1 scope. Make sure to use the SSO base URL https://sisilogin.testeveonline.com if you're doing this against Singularity.

Then, make the following call and replace {corporation_id} with your corporation ID and {access_token} with the access token you received:

$ curl --header "Accept: application/json" --header "Authorization: Bearer {access_token}" https://esi.tech.ccp.is/v1/corporation/{corporation_id}/mining/observers/?datasource=singularity

Note: the datasource parameter in this example is only needed when getting data from Singularity before the Lifeblood expansion is released.

Here's a look at the response for the in-game CCP Corporation on Singularity:

[
    {
        "last_updated": "2017-09-21",
        "observer_id": 1025242944478,
        "observer_type": "structure"
    },
    {
        "last_updated": "2017-10-03",
        "observer_id": 1025246025947,
        "observer_type": "structure"
    },
    {
        "last_updated": "2017-09-28",
        "observer_id": 1025246389128,
        "observer_type": "structure"
    },
    {
        "last_updated": "2017-09-30",
        "observer_id": 1025249693147,
        "observer_type": "structure"
    }
]

Each observer_id is the ID for a Upwell Refinery that has logged mining events. The CCP corporation owns more than four Upwell Refineries on Singularity, but these do not show up because they have not been participating in any mining activity. You will use the observer_id in the endpoint described below. To get more info on the given structure behind the observer_id you can drop it into the /universe/structures/{structure_id}/ endpoint.

GET /corporation/{corporation_id}/mining/observers/{observer_id}/

Cache time: 3600 seconds (1 hour)

Required scope: esi-industry.read_corporation_mining.v1

Required role: Accountant

Pagination: 1000 results per page, returns X-pages HTTP header

Given an observer_id from the above endpoint, this will list all mining events recorded in the mining ledger for the given observer. Using this, you can tell who mined which type of mineral and which corporation that character belonged to at the time of mining. This endpoint is purposely cached for an hour so that you cannot get real-time updates on whether someone is ninja mining your corporation's minerals. You'll have to police that in-game!

Example

First get an access token with the esi-industry.read_corporation_mining.v1 scope. Make sure to use the SSO base URL https://sisilogin.testeveonline.com if you're doing this against Singularity.

Then, make the following call and replace {corporation_id} with your corporation ID, {observer_id} with an ID of an Upwell Refinery and {access_token} with the access token you received:

$ curl --header "Accept: application/json" --header "Authorization: Bearer {access_token}" https://esi.tech.ccp.is/v1/corporation/{corporation_id}/mining/observers/{observer_id}/?datasource=singularity

Note: the datasource parameter in this example is only needed when getting data from Singularity before the Lifeblood expansion is released.

Here's a look at the response for an Upwell Refinery that the in-game CCP Corporation has on Singularity:

[
    {
        "last_updated": "2017-09-21",
        "character_id": 645704275,
        "recorded_corporation_id": 109299958,
        "type_id": 45491,
        "quantity": 5130
    },
    {
        "last_updated": "2017-09-21",
        "character_id": 95633128,
        "recorded_corporation_id": 98407839,
        "type_id": 45491,
        "quantity": 11832
    },
    {
        "last_updated": "2017-09-21",
        "character_id": 95633128,
        "recorded_corporation_id": 98407839,
        "type_id": 45492,
        "quantity": 11832
    },
    {
        "last_updated": "2017-09-21",
        "character_id": 95633128,
        "recorded_corporation_id": 98407839,
        "type_id": 1231,
        "quantity": 3926
    }
]

As we can see, each entry in the mining ledger has a character_id of the character that did the mining, a recorded_corporation_id showing which corporation that character was part of when they did the mining, a type_id for the mineral type that was mined and quantity to show how much of that mineral was mined. This endpoint shows mining events going back 30 days.

You can drop the character_id into the /characters/{character_id}/ endpoint for more details about a given character ID. recorded_corporation_id can be dropped into the /corporations/{corporation_id}/ endpoint and type_id can be dropped into the /universe/types/{type_id}/ endpoint.

What happens when an Upwell Refinery changes ownership?

If corporation A sells its Upwell Refinery to corporation B then corporation A will still see this structure listed in the response from the /corporation/{corporation_id}/mining/observers/ endpoint. However, if corporation A looks up mining events for the sold structure they will only see events that happened in the past 30 days while it was under corporation A's ownership. Any mining events that happen after the transition to corporation B will only be viewable by corporation B.

Conclusion

Team Tech Co. is excited to release new endpoints along with a new feature and we hope this overview can give you a deeper understanding of how to use these three mining ledger endpoints. We look forward to seeing what you will do! As always, you can discuss these endpoints in the tweetfleet slack (use this link to join) in the #esi channel.

o7

-- Team Tech Co.


Nice and ESI (Easy) Task.async_stream -- A blog about concurrently fetching all of EVE's solar systems via ESI using Elixir by CCP AquarHEAD.

Appendix

The following paths have been added or updated in ESI since the previous blog:

  • GET /latest/corporations/{corporation_id}/wallets/{division}/transactions/ (v1)
  • GET /latest/corporations/{corporation_id}/assets/ (v1)
  • GET /latest/corporations/{corporation_id}/blueprints/ (v1)
  • GET /latest/corporations/{corporation_id}/titles/ (v1)
  • GET /latest/characters/{character_id}/assets/ (v1, spec breaking) -- Migrated to a pagination style
  • GET /latest/characters/{character_id}/calendar/{event_id}/attendees/ (v1)
  • GET /latest/characters/{character_id}/wallet/journal/ (v2)
  • GET /latest/characters/{character_id}/blueprints/ (v2)
  • GET /latest/universe/types/{type_id}/ (v3)
  • POST /latest/characters/{character_id}/assets/names/ (v1)
  • POST /latest/characters/{character_id}/assets/locations/ (v1)

Get a sneak peek at what's coming to ESI by watching our deployment timeline

back