Documentation // API

Endpoint reference

Base URL https://mutamarket.com/api

Modules

Browse, retrieve and import abyssal modules.

GET /modules

Always rejects: the list needs a type

The list requires a type option, so this always answers 404.

Responses

404 The list requires a type option. ApiError
{
  "message": "Please provide a valid type."
}
POST /modules

Import a module from EVE

Fetches the module live from ESI and runs the value estimation synchronously, so expect a few seconds. Re-submitting an existing module refreshes it. Do not call this in a loop.

Request body

FieldTypeDescription
item_id integer or nullEVE item id of the module.
message string or nullAny string containing `showinfo:{type_id}//{item_id}`, such as an in-game item link copied out of chat.
type_id integer or nullEVE type id of the mutated module.

Responses

200 The imported module. ModuleEnvelope
400 The import failed, or the request carried no usable item link. ApiError
{
  "message": "Failed to add module!"
}
422 Neither a message nor both ids were given. `message` repeats the first failing field, in the order message, item_id, type_id. ValidationError
GET /modules/{query}

List modules of a type, or get one module

A path segment ending in digits is read as a single-module lookup by EVE item id or MutaMarket slug. Anything else is the type-scoped list, whose segments carry the filter and sort options documented at https://mutamarket.com/documentation/api-modules.

The list requires a type option, e.g. `type/49738` or `type/abyssal-ballistic-control-system`.

Parameters

NameInTypeDescription
query *pathstringEither a module item id or slug, or a type segment plus filter and sort segments.
cursor querystringOpaque pagination cursor from meta.next_cursor of a previous response. List responses only.
region_id queryintegerOnly modules whose contract is in this EVE region. List responses only.

Responses

200 One module, or a page of them. ModuleOrPage
404 No such module, or the query named no valid abyssal type. ApiError
{
  "message": "No module with this item id is known to MutaMarket."
}

Reference

Model quality and attribute roll ranges.

GET /abyssal-type-statistics

Attribute roll ranges per type

The best and worst possible rolled value of every mutated attribute of every abyssal type. This is the data behind the fraction_type roll-quality metric and the attribute bars.

Responses

200 One entry per type and attribute. AbyssalTypeStatistic[]
GET /estimator-statistics

Price estimator quality per type

How much data each per-type price model was trained on, how well it fits, and its average error. A null r2 means the model is untrained and modules of that type carry no estimate.

Responses

200 One entry per abyssal type. EstimatorStatistic[]

Schemas

AbyssalTypeStatistic

The roll extremes of one attribute of one abyssal type.

FieldTypeDescription
attribute *StatisticAttribute
attribute_id *integer
best *numberThe best possible rolled value.
high_is_good *booleanWhether a larger value is better. When false, `best` is smaller.
id *integer
is_derived *booleanComputed by MutaMarket rather than rolled by EVE.
is_virtual *boolean
type *StatisticType
type_id *integer
worst *numberThe worst possible rolled value.

ApiError

Every error response of the public API.

FieldTypeDescription
message *string

AssetLocationView

Where a user's module physically sits, the legacy `AssetResource` shape: the direct parent (ship/container, or the station itself when the module lies loose in a hangar) plus the resolved station/structure at the top of the ancestor chain.

FieldTypeDescription
corporation_id integer or null
location_flag *string
location_id *integer
location_index *integer
location_type *string
owner *CharacterRefThe character holding the asset (legacy `asset.character`, loaded by `withUserAsset`); the find-asset card names them.
parent_name *string
parent_slug *string
parent_type_id integer or null
station null or StationRef

CharacterRef

Legacy `CharacterResource` without the user-conditional fields.

FieldTypeDescription
corporation_id integer or null
description string or null
has_premium *boolean
id *integer
name *string
slug *string

CollectionNoteRef

Legacy `CollectionNoteResource`.

FieldTypeDescription
collection *NoteCollectionRef
content *string
id *integer

ContractRef

Legacy `ContractResource` as loaded for a module's latest public contract (issuer loaded; modules/types/acceptor/status absent for public contracts).

FieldTypeDescription
abyssal_modules_count *integer
asking_for_items *boolean
date_expired string or null
date_issued string or null
id *integer
issuer null or CharacterRef
non_abyssal_modules_count *integer
plex_count *integer
price number or nullThe unified price (auction bids and asked-for PLEX included).
type *string`auction` or `item_exchange`.

EstimatorStatistic

Quality metrics of one per-type price model.

FieldTypeDescription
created_at string or null
data_count *integerRecorded sales the model was trained on.
data_statistics anyTraining sales by the source module's meta group.
id *integer
last_trained_at string or null
mae number or nullMean absolute error, in ISK.
name *string
nmae number or nullMean absolute error normalized by the mean sale price.
r2 number or nullFit against the training data, 1 being perfect. Null means the model is untrained, and modules of the type carry no estimate.
type_id *integer
updated_at string or null

ImportModuleRequest

Give either `message`, or both `type_id` and `item_id`.

FieldTypeDescription
item_id integer or nullEVE item id of the module.
message string or nullAny string containing `showinfo:{type_id}//{item_id}`, such as an in-game item link copied out of chat.
type_id integer or nullEVE type id of the mutated module.

ModuleAttributeView

Legacy `MutatedAttributeResource`, plus the server-computed `type_band` the legacy frontend derives from its bundled static data.

FieldTypeDescription
bar *integer
base_value *number
display_name *string
fraction *number
fraction_absolute *number
fraction_type *number
id *integer
is_derived *boolean
is_virtual *boolean
name *string
type_band array or nullThe mutaplasmid's own share of the type-wide roll range, as (min, max) half-width fractions — the highlight band of the type-normalized bar. Absent when the mutaplasmid covers the whole range.
unit null or UnitRef
value *number

ModuleDetail

A module as the legacy `ModuleResource` emits it for guests with the default relations loaded: same field names, same nesting. Keys owned by unported features (`contract`, `public_asset`, estimator values) are present and null, like the legacy loaded-but-empty relations.

FieldTypeDescription
asset null or AssetLocationView
average_fraction number or null
collection_note null or CollectionNoteRef
contract null or ContractRef
creator null or CharacterRef
estimated_value number or null
estimated_value_updated_at string or null
id *integer
mutaplasmid null or MutaplasmidRef
mutated_attributes *ModuleAttributeView[]
note null or NoteRef
public_asset anyThe MutaMarket sell listing; arrives with the assets milestone.
slug *string
source_type null or SourceTypeRef
training_module null or TrainingRef
type *TypeRef

ModuleEnvelope

One module.

FieldTypeDescription
data *ModuleDetail

ModuleOrPage

One module when the path segment is an id or slug, a page of them when it is a type-scoped query.

One of: ModuleEnvelope,ModulePage

ModulePage

A page of modules.

FieldTypeDescription
data *ModuleDetail[]
links *PageLinks
meta *PageMeta

MutaplasmidRef

Legacy `MutaplasmidResource`.

FieldTypeDescription
id *integer
name *string

NoteCollectionRef

Legacy `CollectionResource` as embedded in a collection note: only the collection's own columns (no counted or loaded relations).

FieldTypeDescription
auto_sync *boolean
created_at *string
description string or null
id *integer
identifier *string
last_synced_at string or null
name *string
slug *string
updated_at *string
visibility *string

NoteRef

Legacy `NoteResource`.

FieldTypeDescription
content *string
id *integer

PageMeta

FieldTypeDescription
next_cursor string or nullOpaque. Pass it back as the `cursor` query parameter.
path *string
per_page *integer
prev_cursor string or null

SourceTypeRef

Legacy `TypeResource` as loaded for the source type (meta group loaded, type attributes and meta level not).

FieldTypeDescription
id *integer
meta_group string or null
meta_group_id integer or null
name *string
published *boolean

StationRef

FieldTypeDescription
id *integer
name *string
slug *string
type_id integer or null

StatisticAttribute

The dogma attribute of a roll range. `high_is_good` and `is_derived` repeat the parent's values.

FieldTypeDescription
display_name string or null
high_is_good *boolean
id *integer
is_derived *boolean
name *string
unit null or StatisticUnit

StatisticType

FieldTypeDescription
id *integer
meta_group string or null
meta_group_id integer or null
name *string
published *boolean

StatisticUnit

FieldTypeDescription
display_name *string
id *integer
name *string

TrainingRef

Legacy `TrainingModuleResource`.

FieldTypeDescription
contract_id *integer
sold_at string or null
sold_for number or null

TypeRef

Legacy `ModuleTypeResource`.

FieldTypeDescription
id *integer
name *string

UnitRef

Legacy `UnitResource`.

FieldTypeDescription
display_name *string
id *integer
name *string

ValidationError

`message` repeats the first failing field.

FieldTypeDescription
errors *objectField name to the messages for that field.
message *string