MENU navbar-image

Introduction

Public API for MutaMarket, the marketplace for abyssal modules in EVE Online. Browse modules with their rolled attributes, roll-quality metrics, price estimates and sale listings, import new modules from the game, and access per-type roll statistics.

This documentation aims to provide all the information you need to work with our API.

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

Authenticating requests

This API is not authenticated.

Abyssal Types

Roll statistics of abyssal types and their attributes.

List attribute roll ranges per abyssal type

Returns the best and worst possible rolled value of every mutated attribute for every abyssal type, including the attribute definition and the abyssal type itself.

Use this to normalize a module's rolls against the theoretical range of its type — it is the same data MutaMarket uses for the fraction_type roll-quality metric and the attribute bars.

Example request:
curl --request GET \
    --get "https://mutamarket.test/api/abyssal-type-statistics" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://mutamarket.test/api/abyssal-type-statistics"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


[
    {
        "id": 1,
        "type_id": 47408,
        "attribute_id": 6,
        "high_is_good": false,
        "is_virtual": false,
        "best": 71.5,
        "worst": 261.00001,
        "is_derived": false,
        "attribute": {
            "id": 6,
            "name": "capacitorNeed",
            "display_name": "Activation Cost",
            "high_is_good": false,
            "is_derived": false,
            "unit": {
                "id": 114,
                "name": "capacitor units",
                "display_name": "GJ"
            }
        },
        "type": {
            "id": 47408,
            "name": "50MN Abyssal Microwarpdrive",
            "meta_group": "Abyssal",
            "meta_group_id": 15,
            "published": true
        }
    },
    {
        "id": 2,
        "type_id": 47408,
        "attribute_id": 20,
        "high_is_good": true,
        "is_virtual": false,
        "best": 597.99999,
        "worst": 425.00001,
        "is_derived": false,
        "attribute": {
            "id": 20,
            "name": "speedFactor",
            "display_name": "Maximum Velocity Bonus",
            "high_is_good": true,
            "is_derived": false,
            "unit": {
                "id": 124,
                "name": "Modifier Relative Percent",
                "display_name": "%"
            }
        },
        "type": {
            "id": 47408,
            "name": "50MN Abyssal Microwarpdrive",
            "meta_group": "Abyssal",
            "meta_group_id": 15,
            "published": true
        }
    }
]
 

Request      

GET api/abyssal-type-statistics

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Estimators

Quality metrics of the machine-learning price estimators behind the estimated_value of modules.

List price estimator quality metrics

Returns quality metrics for every per-type machine-learning price estimator: how much historic sales data each model was trained on (data_count), how well it fits the training data (r2, where 1 is a perfect fit), and its average prediction error in ISK (mae) and normalized by the mean sale price (nmae).

Useful for judging how much trust to put into the estimated_value of modules of a given type.

Example request:
curl --request GET \
    --get "https://mutamarket.test/api/estimator-statistics" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://mutamarket.test/api/estimator-statistics"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


[
    {
        "id": 1,
        "type_id": 47408,
        "name": "50MN Abyssal Microwarpdrive",
        "data_count": 4679,
        "r2": 0.41,
        "mae": 183450744.87,
        "nmae": 39.3,
        "last_trained_at": "2026-02-23T11:00:29.000000Z",
        "data_statistics": {
            "Tech I": 1804,
            "Faction": 333,
            "Officer": 1,
            "Tech II": 243,
            "Deadspace": 2182,
            "Storyline": 116
        },
        "created_at": "2024-11-25T15:02:07.000000Z",
        "updated_at": "2026-02-23T11:00:29.000000Z"
    },
    {
        "id": 2,
        "type_id": 47702,
        "name": "Abyssal Stasis Webifier",
        "data_count": 11492,
        "r2": 0.71,
        "mae": 117016139.61,
        "nmae": 29.67,
        "last_trained_at": "2026-02-23T11:01:13.000000Z",
        "data_statistics": {
            "Tech I": 410,
            "Faction": 9891,
            "Officer": 17,
            "Tech II": 1174
        },
        "created_at": "2024-11-25T15:02:07.000000Z",
        "updated_at": "2026-02-23T11:01:13.000000Z"
    }
]
 

Request      

GET api/estimator-statistics

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Modules

Browse abyssal modules that are for sale, retrieve single modules with all rolled attributes and price data, and import modules from EVE.

Get a single module

Returns a single module with all rolled attributes, roll-quality metrics, the estimated value, and its current sale listing (contract or MutaMarket sell listing), if any. The module must have been imported into MutaMarket before; unknown item ids return 404.

Example request:
curl --request GET \
    --get "https://mutamarket.test/api/modules/large-abyssal-armor-repairer-1027784685291" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://mutamarket.test/api/modules/large-abyssal-armor-repairer-1027784685291"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "id": 1052842251186,
    "type": {
        "id": 49738,
        "name": "Abyssal Ballistic Control System"
    },
    "creator": {
        "id": 2112606829,
        "slug": "max1m-bolshakov-2112606829",
        "name": "Max1m Bolshakov",
        "description": null,
        "has_premium": false,
        "corporation_id": 1000045
    },
    "mutated_attributes": [
        {
            "id": 50,
            "name": "cpu",
            "display_name": "CPU usage",
            "value": 21.069600465775,
            "base_value": 24,
            "fraction": 0.814,
            "fraction_type": 0.4884,
            "fraction_absolute": 0.90597529518355,
            "bar": 0,
            "is_derived": false,
            "unit": {
                "id": 106,
                "name": "Teraflops",
                "display_name": "tf"
            },
            "is_virtual": false
        },
        {
            "id": 1255,
            "name": "droneDamageBonus",
            "display_name": "Drone Damage Bonus",
            "value": 0,
            "base_value": 0,
            "fraction": 0,
            "fraction_type": 0,
            "fraction_absolute": -2,
            "bar": 0,
            "is_derived": false,
            "unit": {
                "id": 105,
                "name": "Percentage",
                "display_name": "%"
            },
            "is_virtual": true
        },
        {
            "id": 213,
            "name": "missileDamageMultiplierBonus",
            "display_name": "Missile Damage Bonus",
            "value": 1.1202800431252,
            "base_value": 1.12,
            "fraction": 0.01786,
            "fraction_type": 0.01,
            "fraction_absolute": 0.59083450673975,
            "bar": 0,
            "is_derived": false,
            "unit": {
                "id": 109,
                "name": "Modifier Percent",
                "display_name": "%"
            },
            "is_virtual": false
        },
        {
            "id": 204,
            "name": "speedMultiplier",
            "display_name": "Rate Of Fire Bonus",
            "value": 0.87609376326203,
            "base_value": 0.89,
            "fraction": 0.78125,
            "fraction_type": 0.52083,
            "fraction_absolute": 0.86475956827719,
            "bar": 0,
            "is_derived": false,
            "unit": {
                "id": 111,
                "name": "Inversed Modifier Percent",
                "display_name": "%"
            },
            "is_virtual": false
        },
        {
            "id": 5000004,
            "name": "dpsIncreaseMissiles",
            "display_name": "DPS Increase",
            "value": 1.27872162787,
            "base_value": 1.2584269662921,
            "fraction": 0.4648,
            "fraction_type": 0.28443,
            "fraction_absolute": 0.70135645073128,
            "bar": 0,
            "is_derived": true,
            "unit": {
                "id": 109,
                "name": "Modifier Percent",
                "display_name": "%"
            },
            "is_virtual": false
        }
    ],
    "source_type": {
        "id": 13937,
        "name": "Dread Guristas Ballistic Control System",
        "meta_group": "Faction",
        "meta_group_id": 4,
        "published": true
    },
    "mutaplasmid": {
        "id": 49740,
        "name": "Gravid Ballistic Control System Mutaplasmid"
    },
    "contract": {
        "id": 228749822,
        "type": "item_exchange",
        "price": 290000000,
        "asking_for_items": false,
        "plex_count": 0,
        "non_abyssal_modules_count": 0,
        "abyssal_modules_count": 1,
        "issuer": {
            "id": 2112606829,
            "slug": "max1m-bolshakov-2112606829",
            "name": "Max1m Bolshakov",
            "description": null,
            "has_premium": false,
            "corporation_id": 1000045
        },
        "date_issued": "2026-02-23T10:42:18.000000Z",
        "date_expired": "2026-03-23T10:42:18.000000Z"
    },
    "estimated_value": 289601018.52,
    "estimated_value_updated_at": "2026-02-23T10:41:59.000000Z",
    "public_asset": null,
    "slug": "abyssal-ballistic-control-system-1052842251186",
    "average_fraction": 0.53770333333333
}
 

Example response (404):


{
    "message": "No module with this item id is known to MutaMarket."
}
 

Request      

GET api/modules/{module_slug}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

module_slug   string     

The slug of the module. Example: large-abyssal-armor-repairer-1027784685291

module   string     

The EVE item id of the module, or its MutaMarket slug (e.g. abyssal-ballistic-control-system-1052842251186). Example: 1052842251186

List modules of a type

Lists all modules of an abyssal type that are currently for sale, either through a public in-game contract or a MutaMarket sell listing. Newest modules come first unless a sort option is given.

The query path segment must contain a type option (type/{id-or-slug}, e.g. type/49738 or type/abyssal-ballistic-control-system) and accepts the same filter options as the module browser, chained as URL segments in any order:

Option Format Effect
sort sort/{field}/{direction} Sort by price (contract price), value (estimated value), fraction (average roll quality), or a dogma attribute given by id or name (e.g. sort/50/desc or sort/cpu/asc). Direction is asc or desc. Sorting by an attribute only returns modules that have that attribute.
attributes attributes/{attribute}/{value} (pairs, repeatable) Filter by rolled attribute values, e.g. attributes/cpu/20-30/damageMultiplier/2.1. A min-max range bounds the value; a single number is a minimum for attributes where high is good, otherwise a maximum.
meta-group meta-group/{group} One of t1, t2, storyline, faction, officer, deadspace: only modules mutated from a source module of that meta group.
meta-level meta-level/{n} Only modules mutated from a source module of that meta level.
contract-price contract-price/{max} or contract-price/{min}-{max} Bound the contract price in ISK.
estimated-value estimated-value/{min} or estimated-value/{min}-{max} Bound the estimated value in ISK.
goldbar flag Only modules with at least one attribute rolled better than the best regular meta variant.
brownbar flag Only modules with at least one attribute rolled worse than the worst regular meta variant.
diamondbar flag Only modules with the best recorded roll for the type in at least one attribute.
item-exchange / auction flag Only contracts of that type.
no-multi-item-contracts flag Only contracts that contain exactly one abyssal module and nothing else.
contracts-only flag Exclude modules that are only listed as MutaMarket sell listings without a contract.
without-other-items flag Only contracts that do not include unrelated items.

Full example: /api/modules/type/abyssal-ballistic-control-system/sort/price/asc/goldbar/contract-price/0-500000000

Responses are cursor-paginated with 100 modules per page: request the next page by passing meta.next_cursor as the cursor query parameter, or follow links.next directly.

Example request:
curl --request GET \
    --get "https://mutamarket.test/api/modules/type/abyssal-ballistic-control-system/sort/price/asc/goldbar" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://mutamarket.test/api/modules/type/abyssal-ballistic-control-system/sort/price/asc/goldbar"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": 1052842251186,
            "type": {
                "id": 49738,
                "name": "Abyssal Ballistic Control System"
            },
            "creator": {
                "id": 2112606829,
                "slug": "max1m-bolshakov-2112606829",
                "name": "Max1m Bolshakov",
                "description": null,
                "has_premium": false,
                "corporation_id": 1000045
            },
            "mutated_attributes": [
                {
                    "id": 50,
                    "name": "cpu",
                    "display_name": "CPU usage",
                    "value": 21.069600465775,
                    "base_value": 24,
                    "fraction": 0.814,
                    "fraction_type": 0.4884,
                    "fraction_absolute": 0.90597529518355,
                    "bar": 0,
                    "is_derived": false,
                    "unit": {
                        "id": 106,
                        "name": "Teraflops",
                        "display_name": "tf"
                    },
                    "is_virtual": false
                },
                {
                    "id": 1255,
                    "name": "droneDamageBonus",
                    "display_name": "Drone Damage Bonus",
                    "value": 0,
                    "base_value": 0,
                    "fraction": 0,
                    "fraction_type": 0,
                    "fraction_absolute": -2,
                    "bar": 0,
                    "is_derived": false,
                    "unit": {
                        "id": 105,
                        "name": "Percentage",
                        "display_name": "%"
                    },
                    "is_virtual": true
                },
                {
                    "id": 213,
                    "name": "missileDamageMultiplierBonus",
                    "display_name": "Missile Damage Bonus",
                    "value": 1.1202800431252,
                    "base_value": 1.12,
                    "fraction": 0.01786,
                    "fraction_type": 0.01,
                    "fraction_absolute": 0.59083450673975,
                    "bar": 0,
                    "is_derived": false,
                    "unit": {
                        "id": 109,
                        "name": "Modifier Percent",
                        "display_name": "%"
                    },
                    "is_virtual": false
                },
                {
                    "id": 204,
                    "name": "speedMultiplier",
                    "display_name": "Rate Of Fire Bonus",
                    "value": 0.87609376326203,
                    "base_value": 0.89,
                    "fraction": 0.78125,
                    "fraction_type": 0.52083,
                    "fraction_absolute": 0.86475956827719,
                    "bar": 0,
                    "is_derived": false,
                    "unit": {
                        "id": 111,
                        "name": "Inversed Modifier Percent",
                        "display_name": "%"
                    },
                    "is_virtual": false
                },
                {
                    "id": 5000004,
                    "name": "dpsIncreaseMissiles",
                    "display_name": "DPS Increase",
                    "value": 1.27872162787,
                    "base_value": 1.2584269662921,
                    "fraction": 0.4648,
                    "fraction_type": 0.28443,
                    "fraction_absolute": 0.70135645073128,
                    "bar": 0,
                    "is_derived": true,
                    "unit": {
                        "id": 109,
                        "name": "Modifier Percent",
                        "display_name": "%"
                    },
                    "is_virtual": false
                }
            ],
            "source_type": {
                "id": 13937,
                "name": "Dread Guristas Ballistic Control System",
                "meta_group": "Faction",
                "meta_group_id": 4,
                "published": true
            },
            "mutaplasmid": {
                "id": 49740,
                "name": "Gravid Ballistic Control System Mutaplasmid"
            },
            "contract": {
                "id": 228749822,
                "type": "item_exchange",
                "price": 290000000,
                "asking_for_items": false,
                "plex_count": 0,
                "non_abyssal_modules_count": 0,
                "abyssal_modules_count": 1,
                "issuer": {
                    "id": 2112606829,
                    "slug": "max1m-bolshakov-2112606829",
                    "name": "Max1m Bolshakov",
                    "description": null,
                    "has_premium": false,
                    "corporation_id": 1000045
                },
                "date_issued": "2026-02-23T10:42:18.000000Z",
                "date_expired": "2026-03-23T10:42:18.000000Z"
            },
            "estimated_value": 289601018.52,
            "estimated_value_updated_at": "2026-02-23T10:41:59.000000Z",
            "public_asset": null,
            "slug": "abyssal-ballistic-control-system-1052842251186",
            "average_fraction": 0.53770333333333
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": "https://mutamarket.test/api/modules/type/49738?cursor=eyJtb2R1bGVzLmlkIjoxMDUyNzM1NjA0NDY5LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9"
    },
    "meta": {
        "path": "https://mutamarket.test/api/modules/type/49738",
        "per_page": 100,
        "next_cursor": "eyJtb2R1bGVzLmlkIjoxMDUyNzM1NjA0NDY5LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9",
        "prev_cursor": null
    }
}
 

Example response (404):


{
    "message": "Please provide a valid type."
}
 

Request      

GET api/modules/{query?}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

query   string     

The abyssal type plus any filter and sort options, chained as URL segments (see description). Must contain a type segment with the EVE type id or name slug. Example: type/abyssal-ballistic-control-system/sort/price/asc/goldbar

Query Parameters

cursor   string  optional    

Pagination cursor taken from meta.next_cursor of a previous response.

region_id   integer  optional    

Only include modules whose contract is located in this EVE region, e.g. 10000002 for The Forge.

Import a module from EVE

Imports a module from EVE into MutaMarket by its in-game item id and returns it with all rolled attributes, roll-quality metrics, and the estimated value.

Identify the module either explicitly via type_id + item_id, or by pasting an in-game item link as message — any string containing showinfo:{type_id}//{item_id} works, which is what you get when you drag an item into the EVE chat window and copy the message.

The module data is fetched live from the EVE ESI API and the value estimation runs synchronously, so expect this request to take a few seconds. Re-submitting an existing module refreshes its data instead of duplicating it.

Example request:
curl --request POST \
    "https://mutamarket.test/api/modules" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"item_id\": 1041420958612,
    \"type_id\": 47820
}"
const url = new URL(
    "https://mutamarket.test/api/modules"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "item_id": 1041420958612,
    "type_id": 47820
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "id": 1052842251186,
    "type": {
        "id": 49738,
        "name": "Abyssal Ballistic Control System"
    },
    "creator": {
        "id": 2112606829,
        "slug": "max1m-bolshakov-2112606829",
        "name": "Max1m Bolshakov",
        "description": null,
        "has_premium": false,
        "corporation_id": 1000045
    },
    "mutated_attributes": [
        {
            "id": 50,
            "name": "cpu",
            "display_name": "CPU usage",
            "value": 21.069600465775,
            "base_value": 24,
            "fraction": 0.814,
            "fraction_type": 0.4884,
            "fraction_absolute": 0.90597529518355,
            "bar": 0,
            "is_derived": false,
            "unit": {
                "id": 106,
                "name": "Teraflops",
                "display_name": "tf"
            },
            "is_virtual": false
        },
        {
            "id": 1255,
            "name": "droneDamageBonus",
            "display_name": "Drone Damage Bonus",
            "value": 0,
            "base_value": 0,
            "fraction": 0,
            "fraction_type": 0,
            "fraction_absolute": -2,
            "bar": 0,
            "is_derived": false,
            "unit": {
                "id": 105,
                "name": "Percentage",
                "display_name": "%"
            },
            "is_virtual": true
        },
        {
            "id": 213,
            "name": "missileDamageMultiplierBonus",
            "display_name": "Missile Damage Bonus",
            "value": 1.1202800431252,
            "base_value": 1.12,
            "fraction": 0.01786,
            "fraction_type": 0.01,
            "fraction_absolute": 0.59083450673975,
            "bar": 0,
            "is_derived": false,
            "unit": {
                "id": 109,
                "name": "Modifier Percent",
                "display_name": "%"
            },
            "is_virtual": false
        },
        {
            "id": 204,
            "name": "speedMultiplier",
            "display_name": "Rate Of Fire Bonus",
            "value": 0.87609376326203,
            "base_value": 0.89,
            "fraction": 0.78125,
            "fraction_type": 0.52083,
            "fraction_absolute": 0.86475956827719,
            "bar": 0,
            "is_derived": false,
            "unit": {
                "id": 111,
                "name": "Inversed Modifier Percent",
                "display_name": "%"
            },
            "is_virtual": false
        },
        {
            "id": 5000004,
            "name": "dpsIncreaseMissiles",
            "display_name": "DPS Increase",
            "value": 1.27872162787,
            "base_value": 1.2584269662921,
            "fraction": 0.4648,
            "fraction_type": 0.28443,
            "fraction_absolute": 0.70135645073128,
            "bar": 0,
            "is_derived": true,
            "unit": {
                "id": 109,
                "name": "Modifier Percent",
                "display_name": "%"
            },
            "is_virtual": false
        }
    ],
    "source_type": {
        "id": 13937,
        "name": "Dread Guristas Ballistic Control System",
        "meta_group": "Faction",
        "meta_group_id": 4,
        "published": true
    },
    "mutaplasmid": {
        "id": 49740,
        "name": "Gravid Ballistic Control System Mutaplasmid"
    },
    "contract": {
        "id": 228749822,
        "type": "item_exchange",
        "price": 290000000,
        "asking_for_items": false,
        "plex_count": 0,
        "non_abyssal_modules_count": 0,
        "abyssal_modules_count": 1,
        "issuer": {
            "id": 2112606829,
            "slug": "max1m-bolshakov-2112606829",
            "name": "Max1m Bolshakov",
            "description": null,
            "has_premium": false,
            "corporation_id": 1000045
        },
        "date_issued": "2026-02-23T10:42:18.000000Z",
        "date_expired": "2026-03-23T10:42:18.000000Z"
    },
    "estimated_value": 289601018.52,
    "estimated_value_updated_at": "2026-02-23T10:41:59.000000Z",
    "public_asset": null,
    "slug": "abyssal-ballistic-control-system-1052842251186",
    "average_fraction": 0.53770333333333
}
 

Example response (400):


{
    "message": "Failed to add module!"
}
 

Example response (422):


{
    "message": "The message field is required when item id is not present.",
    "errors": {
        "message": [
            "The message field is required when item id is not present."
        ]
    }
}
 

Request      

POST api/modules

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

message   string  optional    

A string containing an in-game item link in the form showinfo:{type_id}//{item_id}. Required when type_id/item_id are not given.

item_id   integer  optional    

The EVE item id of the module. Required together with type_id when message is not given. Example: 1041420958612

type_id   integer  optional    

The EVE type id of the (unmutated) source module. Required together with item_id when message is not given. Example: 47820