Files
gemory/docs/mammon-api.yml
T

2138 lines
62 KiB
YAML

openapi: 3.1.0
info:
title: OpenAPI definition
version: v0
servers:
- url: http://localhost:8080
description: Generated server url
paths:
/rule-book:
get:
tags:
- rule-book
summary: Find the caller's rule book
operationId: findRuleBook
responses:
"200":
description: The caller's rule book
content:
'*/*':
schema:
$ref: "#/components/schemas/RuleBookResponse"
"404":
description: The caller has no rule book
put:
tags:
- rule-book
summary: Update the caller's rule book
operationId: updateRuleBook
requestBody:
description: New state of the caller's rule book
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateRuleBookRequest"
required: true
responses:
"200":
description: The updated rule book
content:
'*/*':
schema:
$ref: "#/components/schemas/RuleBookResponse"
"400":
description: |-
Returned when:
- a binding references a ledger the caller does not own
- a binding references a ledger that is not a main ledger
/ledgers/main/{ledgerId}:
put:
tags:
- ledger
summary: Update a main ledger
operationId: updateMainLedger
parameters:
- name: ledgerId
in: path
description: Id of the main ledger
required: true
schema:
type: string
format: uuid
requestBody:
description: New state of the main ledger
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateMainLedgerRequest"
required: true
responses:
"200":
description: The updated main ledger
content:
'*/*':
schema:
$ref: "#/components/schemas/MainLedgerResponse"
"400":
description: |-
Returned when:
- the ledger is not a main ledger
- the request is invalid
"404":
description: No ledger with this id
/ledgers/combined/{ledgerId}:
put:
tags:
- ledger
summary: Update a combined ledger
operationId: updateCombinedLedger
parameters:
- name: ledgerId
in: path
description: Id of the combined ledger
required: true
schema:
type: string
format: uuid
requestBody:
description: New state of the combined ledger
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateCombinedLedgerRequest"
required: true
responses:
"200":
description: The updated combined ledger
content:
'*/*':
schema:
$ref: "#/components/schemas/CombinedLedgerResponse"
"400":
description: |-
Returned when:
- the ledger is not a combined ledger
- the request is invalid
"404":
description: No ledger with this id
/reprocessing:
post:
tags:
- reprocessing
summary: "Reprocess the given item stacks for a character, appraising the input\
\ and resulting materials"
operationId: reprocessItems
parameters:
- name: locationId
in: query
description: Location to derive reprocessing efficiency at; defaults to the
character's current location when omitted
required: false
schema:
type: integer
format: int64
requestBody:
description: Character and item stacks to reprocess
content:
application/json:
schema:
$ref: "#/components/schemas/ReprocessItemsRequest"
required: true
responses:
"200":
description: The reprocessing result for each input stack
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/ReprocessingResultResponse"
/reprocessing/paste:
post:
tags:
- reprocessing
summary: "Reprocess a pasted EVE inventory listing for a character, resolving\
\ item names before appraising the input and resulting materials"
operationId: reprocessRawItems
parameters:
- name: characterId
in: query
description: Character to reprocess for
required: true
schema:
type: integer
format: int64
- name: locationId
in: query
description: Location to derive reprocessing efficiency at; defaults to the
character's current location when omitted
required: false
schema:
type: integer
format: int64
requestBody:
description: Raw tab-separated inventory listing copied from the EVE client
content:
text/plain:
schema:
type: string
required: true
responses:
"200":
description: The reprocessing result for each resolved input stack
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/ReprocessingResultResponse"
/refresh:
post:
tags:
- auth
summary: Rotate the refresh session and mint a fresh access token
operationId: refresh
responses:
"200":
description: A fresh access token; the refresh cookie is rotated
content:
'*/*':
schema:
$ref: "#/components/schemas/RefreshResponse"
"401":
description: "Missing, expired, or reused refresh token"
content:
'*/*':
schema:
$ref: "#/components/schemas/RefreshResponse"
/market/types/paste:
post:
tags:
- market
summary: "Parse a pasted EVE inventory listing into market type stacks, resolving\
\ names to type ids"
operationId: parseStacks
requestBody:
description: Raw tab-separated inventory listing copied from the EVE client
content:
text/plain:
schema:
type: string
required: true
responses:
"200":
description: The resolved stacks; lines whose name does not match any type
are omitted and lines resolving to the same type are merged with their
quantities summed
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/MarketTypeStackResponse"
"400":
description: Returned when a line carries a quantity that is not a positive
whole number
/market/prices/paste:
post:
tags:
- market
summary: "Parse a pasted EVE inventory block (item name + quantity, tab/newline\
\ separated) and return the current valuation of each stack at the given market\
\ location (Jita by default)"
operationId: pastePrices
parameters:
- name: locationId
in: query
description: Station or structure id of the market to price against; defaults
to Jita when omitted
required: false
schema:
type: integer
format: int64
requestBody:
content:
text/plain:
schema:
type: string
description: "Raw inventory block copied from the EVE client, e.g. \"\
Tritanium\\t1000\""
required: true
responses:
"200":
description: "One stack appraisal per resolved market type, valued at current\
\ buy and sell prices"
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/MarketTypeStackAppraisalResponse"
"400":
description: Returned when the request body is not text/plain or locationId
is not a market location id
/market/history/refresh:
post:
tags:
- market-history-admin-controller
operationId: refresh_1
responses:
"202":
description: Accepted
/logout:
post:
tags:
- auth
summary: Revoke the refresh session and clear the refresh cookie
operationId: logout
responses:
"204":
description: The refresh session is revoked and the cookie cleared
/ledgers/main:
post:
tags:
- ledger
summary: Create a main ledger
operationId: createMainLedger
requestBody:
description: Main ledger to create
content:
application/json:
schema:
$ref: "#/components/schemas/CreateMainLedgerRequest"
required: true
responses:
"201":
description: The created main ledger
headers:
Location:
description: URL of the created main ledger
style: simple
schema:
type: string
format: uri
content:
'*/*':
schema:
$ref: "#/components/schemas/MainLedgerResponse"
"400":
description: Invalid request (e.g. blank name)
/ledgers/combined:
post:
tags:
- ledger
summary: Create a combined ledger
operationId: createCombinedLedger
requestBody:
description: Combined ledger to create
content:
application/json:
schema:
$ref: "#/components/schemas/CreateCombinedLedgerRequest"
required: true
responses:
"201":
description: The created combined ledger
headers:
Location:
description: URL of the created combined ledger
style: simple
schema:
type: string
format: uri
content:
'*/*':
schema:
$ref: "#/components/schemas/CombinedLedgerResponse"
"400":
description: "Invalid request (e.g. blank name, a member ledger missing\
\ or already contained)"
/characters/add:
post:
tags:
- auth
summary: Seed the current user in the session so the next SSO links the new
character to them
operationId: addCharacter
responses:
"204":
description: The link is seeded; follow with a full-page nav to /oauth2/authorization/esi
"401":
description: Missing or expired access token
/activity/consume:
post:
tags:
- activity
summary: Manually record a consumption (sell) of an item. Call POST /activities/process
to fold it into acquisitions.
operationId: consume
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/ManualActivityRequest"
required: true
responses:
"200":
description: Consumption recorded
"400":
description: Invalid request (e.g. CORPORATION source)
"404":
description: Source not owned by the caller
/activity/acquire:
post:
tags:
- activity
summary: Manually record an acquisition (buy) of an item. Call POST /activities/process
to fold it into acquisitions.
operationId: acquire
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/ManualActivityRequest"
required: true
responses:
"200":
description: Acquisition recorded
"400":
description: Invalid request (e.g. CORPORATION source)
"404":
description: Source not owned by the caller
/activities/process:
post:
tags:
- activity
summary: Process new activities for the authenticated user's characters
operationId: processNewActivities
responses:
"202":
description: Processing started in the background
/rule-scripts/definitions:
get:
tags:
- rule-script
summary: Download the TypeScript definitions for the rule script runtime
operationId: getScriptDefinitions
responses:
"200":
description: The rule-runner.d.ts type definitions
content:
text/plain:
schema:
type: string
/me:
get:
tags:
- auth
summary: Return the authenticated user and the characters they own
operationId: me
responses:
"200":
description: The authenticated user and their characters
content:
'*/*':
schema:
$ref: "#/components/schemas/MeResponse"
"401":
description: Missing or expired access token
content:
'*/*':
schema:
$ref: "#/components/schemas/MeResponse"
/market/{marketTypeId}/scan:
get:
tags:
- market
summary: "Scan a single market type, returning its volume-weighted price quartiles\
\ and recent price trend"
operationId: scanMarketType
parameters:
- name: marketTypeId
in: path
description: The market type id to scan
required: true
schema:
type: integer
format: int64
- name: days
in: query
description: Number of most recent days of history to analyse
required: false
schema:
type: integer
format: int32
default: 365
minimum: 1
- name: brokerFee
in: query
description: "Broker fee as a fraction (e.g. 0.015 for 1.5%), paid on both\
\ buy and sell orders"
required: false
schema:
type: number
default: 0.015
maximum: 1
minimum: 0
- name: salesTax
in: query
description: "Sales tax as a fraction (e.g. 0.03375 for 3.375%), paid on sell\
\ orders"
required: false
schema:
type: number
default: 0.03375
maximum: 1
minimum: 0
responses:
"200":
description: The scan result for the requested market type
content:
'*/*':
schema:
$ref: "#/components/schemas/MarketScanResponse"
"400":
description: The days parameter is not greater than 0
/market/{marketTypeId}/history:
get:
tags:
- market
summary: "Find the market history of a type, most recent first"
operationId: findHistory
parameters:
- name: marketTypeId
in: path
description: Id of the market type
required: true
schema:
type: integer
format: int64
- name: days
in: query
description: Optional number of most recent days to return; omit for the full
history
required: false
schema:
type: integer
format: int32
minimum: 1
responses:
"200":
description: The market history of the type
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/MarketHistoryResponse"
"400":
description: The days parameter is not greater than 0
/market/{marketTypeId}/history/quartiles:
get:
tags:
- market
summary: Compute volume-weighted price quartiles and the recent price trend
from a type's market history
operationId: findQuartiles
parameters:
- name: marketTypeId
in: path
description: Id of the market type
required: true
schema:
type: integer
format: int64
- name: days
in: query
description: Optional number of most recent days to analyze; omit for the
full history
required: false
schema:
type: integer
format: int32
minimum: 1
responses:
"200":
description: The price quartiles of the type
content:
'*/*':
schema:
$ref: "#/components/schemas/HistoryQuartilesResponse"
"400":
description: The days parameter is not greater than 0
/market/types:
get:
tags:
- market
summary: Return the static market type details for each requested type id
operationId: findTypes
parameters:
- name: ids
in: query
description: "Market type ids to look up, e.g. ids=34,35"
required: true
schema:
type: array
items:
type: integer
format: int64
responses:
"200":
description: The market types found for the requested ids; unknown ids are
omitted
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/MarketTypeResponse"
"400":
description: |-
Returned when:
- the ids parameter is missing
- an ids value is not a numeric id
/market/types/search:
get:
tags:
- market
summary: "Search marketable types whose name contains the given text, case-insensitively"
operationId: searchTypes
parameters:
- name: name
in: query
description: "Text to match against the type name, e.g. name=tritan"
required: true
schema:
type: string
- name: limit
in: query
description: "Maximum number of results to return, defaults to 50"
required: false
schema:
type: integer
format: int32
default: 50
responses:
"200":
description: "The marketable types matching the search, ordered by name\
\ and capped at the requested limit"
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/MarketTypeResponse"
"400":
description: |-
Returned when:
- the name parameter is missing
- the limit value is not a number
/market/scan:
get:
tags:
- market
summary: "Scan every tracked market type, returning volume-weighted price quartiles\
\ and the recent price trend for each"
operationId: scanMarket
parameters:
- name: days
in: query
description: Number of most recent days of history to analyse
required: false
schema:
type: integer
format: int32
default: 365
minimum: 1
- name: brokerFee
in: query
description: "Broker fee as a fraction (e.g. 0.015 for 1.5%), paid on both\
\ buy and sell orders"
required: false
schema:
type: number
default: 0.015
maximum: 1
minimum: 0
- name: salesTax
in: query
description: "Sales tax as a fraction (e.g. 0.03375 for 3.375%), paid on sell\
\ orders"
required: false
schema:
type: number
default: 0.03375
maximum: 1
minimum: 0
responses:
"200":
description: "The scan results, one entry per tracked market type"
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/MarketScanResponse"
"400":
description: The days parameter is not greater than 0
/market/prices:
get:
tags:
- market
summary: "Return the current order book (highest buy, lowest sell, order count)\
\ for each requested market type, priced at the given market location (Jita\
\ by default)"
operationId: currentPrices
parameters:
- name: types
in: query
description: "Market type ids to price, e.g. types=34,35"
required: true
schema:
type: array
items:
type: integer
format: int64
- name: locationId
in: query
description: Station or structure id of the market to price against; defaults
to Jita when omitted
required: false
schema:
type: integer
format: int64
responses:
"200":
description: "The order book for each requested type, one entry per type"
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/MarketPriceResponse"
"400":
description: |-
Returned when:
- the types parameter is missing
- a types value is not a numeric id
- locationId is not a market location id
/market/orders:
get:
tags:
- market
summary: List the open market orders across all characters owned by the authenticated
user
operationId: findAllMarketOrders
responses:
"200":
description: The authenticated user's open market orders
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/MarketOrderResponse"
/market/history/quartiles:
get:
tags:
- market
summary: Compute volume-weighted price quartiles and the recent price trend
for each requested market type
operationId: findAllQuartiles
parameters:
- name: types
in: query
description: "Market type ids to analyze, e.g. types=34,35"
required: true
schema:
type: array
items:
type: integer
format: int64
- name: days
in: query
description: Optional number of most recent days to analyze; omit for the
full history
required: false
schema:
type: integer
format: int32
minimum: 1
responses:
"200":
description: "The price quartiles for each requested type, one entry per\
\ type"
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/HistoryQuartilesResponse"
"400":
description: |-
Returned when:
- the types parameter is missing
- a types value is not a numeric id
- the days parameter is not greater than 0
/locations/{id}:
get:
tags:
- location
summary: "Resolve a market location id (NPC station or public structure, or\
\ a private structure reachable by the authenticated caller's characters)\
\ to its name and containing solar system and region"
operationId: findLocationById
parameters:
- name: id
in: path
description: "Market location id (station id) to resolve, e.g. 60003760"
required: true
schema:
type: integer
format: int64
responses:
"200":
description: The resolved market location
content:
'*/*':
schema:
$ref: "#/components/schemas/DockableLocationResponse"
"400":
description: Returned when the id is not a market location id
"404":
description: Returned when no market location has the given id
/locations/search:
get:
tags:
- location
summary: "Search market locations (NPC stations and public structures, plus\
\ private structures reachable by the authenticated caller's characters) whose\
\ name contains the given text, case-insensitively"
operationId: searchLocations
parameters:
- name: name
in: query
description: "Text to match against the location name, e.g. name=jita"
required: true
schema:
type: string
- name: limit
in: query
description: "Maximum number of results to return, defaults to 50"
required: false
schema:
type: integer
format: int32
default: 50
responses:
"200":
description: "The market locations matching the search, ordered by name\
\ and capped at the requested limit"
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/DockableLocationResponse"
"400":
description: |-
Returned when:
- the name parameter is missing
- the limit value is not a number
/ledgers:
get:
tags:
- ledger
summary: Find all ledgers owned by the authenticated user
operationId: findAllLedgers
responses:
"200":
description: The authenticated user's ledgers
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/LedgerResponse"
/ledgers/{ledgerId}:
get:
tags:
- ledger
summary: Find a ledger by its id
operationId: findLedgerById
parameters:
- name: ledgerId
in: path
description: Id of the ledger
required: true
schema:
type: string
format: uuid
responses:
"200":
description: The ledger
content:
'*/*':
schema:
$ref: "#/components/schemas/LedgerResponse"
"400":
description: The ledger cannot be exposed (system ledger)
"404":
description: No ledger with this id
/ledgers/{ledgerId}/transactions:
get:
tags:
- transaction
summary: Find all transactions in a ledger
operationId: finAllTransactionsInLedger
parameters:
- name: ledgerId
in: path
description: Id of the ledger
required: true
schema:
type: string
format: uuid
responses:
"200":
description: All transactions in the ledger
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/TransactionResponse"
"404":
description: No ledger with this id
/ledgers/{ledgerId}/profit:
get:
tags:
- transaction
summary: Get the daily profit series for a single ledger
operationId: profitPerDayInLedger
parameters:
- name: ledgerId
in: path
description: Id of the ledger
required: true
schema:
type: string
format: uuid
responses:
"200":
description: "Daily profit for the ledger, ascending by date, only for days\
\ with ISK activity"
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/DailyProfitResponse"
"400":
description: The ledger is the system ledger or a combined ledger
"404":
description: No ledger with this id
/ledgers/{ledgerId}/balance:
get:
tags:
- ledger
summary: Find the balance of a ledger
operationId: findBalanceByLedgerId
parameters:
- name: ledgerId
in: path
description: Id of the ledger
required: true
schema:
type: string
format: uuid
responses:
"200":
description: The balance of the ledger
content:
'*/*':
schema:
$ref: "#/components/schemas/BalanceResponse"
"404":
description: No ledger with this id
/corporations:
get:
tags:
- corporation
summary: "Resolve public information for several corporation ids at once, silently\
\ omitting ids ESI cannot resolve"
operationId: findCorporations
parameters:
- name: ids
in: query
description: "Corporation ids to resolve, e.g. ids=98000001,98000002"
required: true
schema:
type: array
items:
type: integer
format: int64
responses:
"200":
description: The corporations that resolved; unknown ids are omitted
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/CorporationResponse"
/corporations/{corporationId}:
get:
tags:
- corporation
summary: "Resolve public information (name, ticker, alliance) for a corporation\
\ id"
operationId: findCorporation
parameters:
- name: corporationId
in: path
description: "Corporation id to resolve, e.g. 98000001"
required: true
schema:
type: integer
format: int64
responses:
"200":
description: The resolved corporation
content:
'*/*':
schema:
$ref: "#/components/schemas/CorporationResponse"
"404":
description: Returned when ESI has no corporation with the given id
/characters:
get:
tags:
- character
summary: Find the characters owned by the authenticated user
operationId: findAllCharacters
responses:
"200":
description: The authenticated user's characters
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/CharacterResponse"
/activities/processed:
get:
tags:
- activity
summary: Stream a notification when the user's activity processing completes
operationId: streamProcessing
responses:
"200":
description: SSE stream opened
content:
text/event-stream:
schema:
$ref: "#/components/schemas/SseEmitter"
/acquisitions:
get:
tags:
- acquisition
summary: "Find the caller's acquisitions, optionally filtered by ledger, market\
\ type and consumption state"
operationId: findAllAcquisitions
parameters:
- name: ledgerId
in: query
description: Only return acquisitions held in this ledger
required: false
schema:
type: string
format: uuid
- name: marketTypeId
in: query
description: Only return acquisitions of this market type
required: false
schema:
type: integer
format: int64
- name: includeConsumed
in: query
description: Include fully consumed acquisitions (no remaining stock)
required: false
schema:
type: boolean
default: false
responses:
"200":
description: The matching acquisitions
content:
'*/*':
schema:
type: array
items:
$ref: "#/components/schemas/AcquisitionResponse"
components:
schemas:
UpdateRuleBookRequest:
type: object
description: Request to update the caller's rule book; replaces its mutable
fields.
properties:
bindings:
type: object
additionalProperties:
type: string
format: uuid
description: "Ledger references the script writes to, each bound to one\
\ of the user's ledgers."
script:
type: string
description: The classification script source.
example: transfer.to('sales')
required:
- bindings
- script
RuleBookResponse:
type: object
description: "The caller's rule book: a script that classifies transactions,\
\ together with its ledger bindings."
properties:
userId:
type: string
format: uuid
description: Owning user identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
bindings:
type: object
additionalProperties:
type: string
format: uuid
description: "Ledger references the script writes to, each bound to one\
\ of the user's ledgers."
script:
type: string
description: The classification script source.
example: transfer.to('sales')
required:
- bindings
- script
- userId
UpdateMainLedgerRequest:
type: object
description: Request to update an existing main ledger.
properties:
name:
type: string
description: New name for the ledger.
example: Main wallet
required:
- name
MainLedgerResponse:
allOf:
- $ref: "#/components/schemas/LedgerResponse"
- type: object
properties:
ledgerId:
type: string
format: uuid
description: Unique ledger identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
name:
type: string
description: Ledger name.
example: Main wallet
balance:
type: number
description: Current ISK balance of the ledger.
example: 1500000.0
description: "A main ledger: a standalone ledger with its own balance."
required:
- balance
- ledgerId
- name
UpdateCombinedLedgerRequest:
type: object
description: Request to update an existing combined ledger; replaces its name
and member set.
properties:
name:
type: string
description: New name for the combined ledger.
example: All wallets
memberLedgerIds:
type: array
description: Ids of the ledgers to aggregate.
items:
type: string
format: uuid
required:
- memberLedgerIds
- name
CombinedLedgerResponse:
allOf:
- $ref: "#/components/schemas/LedgerResponse"
- type: object
properties:
ledgerId:
type: string
format: uuid
description: Unique ledger identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
name:
type: string
description: Ledger name.
example: All wallets
balance:
type: number
description: Aggregate ISK balance across all member ledgers.
example: 1500000.0
memberLedgerIds:
type: array
description: Ids of the ledgers aggregated by this combined ledger.
items:
type: string
format: uuid
description: "A combined ledger: an aggregate whose balance is the sum of its\
\ member ledgers."
required:
- balance
- ledgerId
- memberLedgerIds
- name
MarketTypeStackRequest:
type: object
description: A quantity of a single market type to reprocess.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id to reprocess.
example: 1230
quantity:
type: integer
format: int64
description: Number of units to reprocess.
example: 1000
required:
- marketTypeId
- quantity
ReprocessItemsRequest:
type: object
description: Request to reprocess a set of item stacks on behalf of a character.
properties:
characterId:
type: integer
format: int64
description: EVE character id whose reprocessing skills and facility standings
are applied.
example: 2112625428
items:
type: array
description: Item stacks to reprocess.
items:
$ref: "#/components/schemas/MarketTypeStackRequest"
required:
- characterId
- items
MarketTypeStackAppraisalResponse:
type: object
description: A market type stack valued at current buy and sell prices.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
quantity:
type: integer
format: int64
description: Number of units in the stack.
example: 1000
buy:
type: number
description: "Total buy value of the stack, in ISK."
example: 5420.0
sell:
type: number
description: "Total sell value of the stack, in ISK."
example: 6100.0
orderCount:
type: integer
format: int64
description: Number of market orders considered for the valuation.
example: 128
required:
- buy
- marketTypeId
- orderCount
- quantity
- sell
ReprocessingResultResponse:
type: object
description: "Result of reprocessing an item stack: the input stack and the\
\ resulting material outputs, each valued at market prices."
properties:
input:
$ref: "#/components/schemas/MarketTypeStackAppraisalResponse"
description: The input stack that was reprocessed.
output:
type: array
description: Material stacks yielded by reprocessing the input.
items:
$ref: "#/components/schemas/MarketTypeStackAppraisalResponse"
required:
- input
- output
RefreshResponse:
type: object
description: A freshly minted access token.
properties:
accessToken:
type: string
description: Short-lived bearer access token (JWT) for the Authorization
header.
required:
- accessToken
MarketTypeStackResponse:
type: object
description: A quantity of a single market type.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
quantity:
type: integer
format: int64
description: Number of units in the stack.
example: 1000
required:
- marketTypeId
- quantity
CreateMainLedgerRequest:
type: object
description: Request to create a new main ledger.
properties:
name:
type: string
description: Name for the new ledger.
example: Main wallet
required:
- name
CreateCombinedLedgerRequest:
type: object
description: Request to create a new combined ledger aggregating the given member
ledgers.
properties:
name:
type: string
description: Name for the new combined ledger.
example: All wallets
memberLedgerIds:
type: array
description: Ids of the ledgers to aggregate.
items:
type: string
format: uuid
required:
- memberLedgerIds
- name
ActivitySourceRequest:
type: object
description: "Where a manual activity is attributed: a character, a ledger,\
\ or nothing. CORPORATION is not accepted."
properties:
type:
type: string
description: The kind of source.
enum:
- CHARACTER
- LEDGER
- NONE
example: CHARACTER
characterId:
type:
- integer
- "null"
format: int64
description: "EVE character id, when the source is a character."
example: 2112625428
ledgerId:
type:
- string
- "null"
format: uuid
description: "Ledger id, when the source is a ledger."
example: 0199a1b2-c3d4-7e5f-8a90-1b2c3d4e5f60
required:
- characterId
- ledgerId
- type
ManualActivityRequest:
type: object
description: Request to manually record an acquisition (buy) or consumption
(sell) of an item.
properties:
source:
$ref: "#/components/schemas/ActivitySourceRequest"
description: Where the activity is attributed.
marketTypeId:
type: integer
format: int64
description: EVE type id of the traded item.
example: 34
quantity:
type: integer
format: int64
description: Number of units.
example: 1000
unitPrice:
type: number
description: Price per unit.
example: 5.42
datetime:
type:
- string
- "null"
format: date-time
description: When the activity happened. Defaults to now when omitted.
taxes:
type:
- number
- "null"
description: Taxes paid. Defaults to 0 when omitted.
example: 0
description:
type:
- string
- "null"
description: Free-form description.
required:
- datetime
- description
- marketTypeId
- quantity
- source
- taxes
- unitPrice
CharacterResponse:
type: object
description: An EVE Online character.
properties:
characterId:
type: integer
format: int64
description: EVE character id.
example: 2112625428
name:
type: string
description: Character name.
example: CCP Falcon
required:
- characterId
- name
MeResponse:
type: object
description: The authenticated user and the characters they own.
properties:
userId:
type: string
format: uuid
description: Unique user identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
characters:
type: array
description: Characters owned by the user.
items:
$ref: "#/components/schemas/CharacterResponse"
required:
- characters
- userId
MarketScanResponse:
type: object
description: "Result of a market scan combining current prices, history quartiles\
\ and a computed profitability score for a market type."
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
buy:
type: number
description: "Current best buy price, in ISK."
example: 5.42
sell:
type: number
description: "Current best sell price, in ISK."
example: 6.1
q1:
type: number
description: "First quartile (25th percentile) historical price, in ISK."
example: 4.8
median:
type: number
description: "Median (50th percentile) historical price, in ISK."
example: 5.42
q3:
type: number
description: "Third quartile (75th percentile) historical price, in ISK."
example: 6.05
totalVolume:
type: integer
format: int64
description: Total traded volume over the scanned period.
example: 15000000
trend:
type: string
description: Overall price trend over the scanned period.
enum:
- UP
- DOWN
- FLAT
profit:
type: number
description: "Estimated profit per unit after fees and taxes, in ISK."
example: 0.45
score:
type: number
description: Computed profitability score used to rank scan results.
example: 0.82
required:
- buy
- marketTypeId
- median
- profit
- q1
- q3
- score
- sell
- totalVolume
- trend
MarketHistoryResponse:
type: object
description: A single day of market history for a market type.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
date:
type: string
format: date
description: Date the history entry covers.
example: 2026-06-22
average:
type: number
description: "Average price for the day, in ISK."
example: 5.42
highest:
type: number
description: "Highest price for the day, in ISK."
example: 6.1
lowest:
type: number
description: "Lowest price for the day, in ISK."
example: 4.8
orderCount:
type: integer
format: int64
description: Number of orders for the day.
example: 320
volume:
type: integer
format: int64
description: Traded volume for the day.
example: 12500000
required:
- average
- date
- highest
- lowest
- marketTypeId
- orderCount
- volume
HistoryQuartilesResponse:
type: object
description: Quartile statistics computed over a market type's price history.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
q1:
type: number
description: "First quartile (25th percentile) price, in ISK."
example: 4.8
median:
type: number
description: "Median (50th percentile) price, in ISK."
example: 5.42
q3:
type: number
description: "Third quartile (75th percentile) price, in ISK."
example: 6.05
totalVolume:
type: integer
format: int64
description: Total traded volume over the period.
example: 15000000
trend:
type: string
description: Overall price trend over the period.
enum:
- UP
- DOWN
- FLAT
required:
- marketTypeId
- median
- q1
- q3
- totalVolume
- trend
MarketTypeResponse:
type: object
description: An EVE Online market type (item) and its static attributes.
properties:
id:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
name:
type: string
description: Item name.
example: Tritanium
groupId:
type: integer
format: int64
description: Group id the item belongs to.
example: 18
marketGroupId:
type: integer
format: int64
description: Market group id the item is listed under.
example: 1857
description:
type: string
description: Item description.
example: The main building block in space structures.
published:
type: boolean
description: Whether the item is published and visible in game.
example: true
basePrice:
type:
- number
- "null"
description: "Base price of the item, in ISK, if defined."
example: 2.99
volume:
type: number
format: double
description: "Packaged volume of a single unit, in m³."
example: 0.01
portionSize:
type: integer
format: int32
description: Number of units produced or reprocessed per portion.
example: 1
iconId:
type:
- integer
- "null"
format: int64
description: "Icon id for the item, if defined."
example: 1
required:
- basePrice
- description
- groupId
- iconId
- id
- marketGroupId
- name
- portionSize
- published
- volume
MarketPriceResponse:
type: object
description: Current best buy and sell prices for a market type.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
buy:
type: number
description: "Best buy price, in ISK."
example: 5.42
sell:
type: number
description: "Best sell price, in ISK."
example: 6.1
orderCount:
type: integer
format: int64
description: Number of market orders considered.
example: 128
required:
- buy
- marketTypeId
- orderCount
- sell
MarketOrderResponse:
type: object
description: An open market order placed by one of the authenticated user's
characters.
properties:
orderId:
type: integer
format: int64
description: EVE market order id.
example: 5266893063
characterId:
type: integer
format: int64
description: EVE character id that owns the order.
example: 2112625428
characterName:
type: string
description: Name of the character that owns the order.
example: CCP Falcon
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id being traded.
example: 34
locationId:
type: integer
format: int64
description: Location id (station or structure) the order is placed at.
example: 60003760
regionId:
type: integer
format: int64
description: Region id the order resides in.
example: 10000002
direction:
type: string
description: Trade direction of the order.
enum:
- BUY
- SELL
example: SELL
price:
type: number
description: "Price per unit, in ISK."
example: 5.42
volumeTotal:
type: integer
format: int64
description: Total volume the order was created with.
example: 1000000
volumeRemain:
type: integer
format: int64
description: Volume still remaining on the order.
example: 750000
minVolume:
type: integer
format: int32
description: Minimum volume that must be bought or sold in a single transaction.
example: 1
range:
type: string
description: "Order range. For buy orders the matching range, for sell orders\
\ always 'region'."
example: region
duration:
type: integer
format: int32
description: "Duration of the order, in days."
example: 90
issued:
type: string
format: date-time
description: When the order was issued.
example: 2026-06-22T05:12:25
escrow:
type: number
description: ISK held in escrow for a buy order; null for sell orders.
example: 4065000.0
required:
- characterId
- characterName
- direction
- duration
- escrow
- issued
- locationId
- marketTypeId
- minVolume
- orderId
- price
- range
- regionId
- volumeRemain
- volumeTotal
DockableLocationResponse:
type: object
description: A market location (NPC station) with its containing solar system
and region.
properties:
id:
type: integer
format: int64
description: EVE market location id (station id).
example: 60003760
name:
type: string
description: Location name.
example: Jita IV - Moon 4 - Caldari Navy Assembly Plant
systemId:
type: integer
format: int64
description: Id of the solar system the location is in.
example: 30000142
systemName:
type: string
description: Name of the solar system the location is in.
example: Jita
regionId:
type: integer
format: int64
description: Id of the region the location is in.
example: 10000002
regionName:
type: string
description: Name of the region the location is in.
example: The Forge
required:
- id
- name
- regionId
- regionName
- systemId
- systemName
LedgerResponse:
description: "A ledger, either a standalone main ledger or a combined ledger\
\ aggregating others."
discriminator:
propertyName: type
mapping:
MAIN: "#/components/schemas/MainLedgerResponse"
COMBINED: "#/components/schemas/CombinedLedgerResponse"
oneOf:
- $ref: "#/components/schemas/MainLedgerResponse"
- $ref: "#/components/schemas/CombinedLedgerResponse"
properties:
type:
type: string
required:
- type
ActivitySourceResponse:
type: object
description: "Where an activity or transaction came from: a character, a corporation\
\ wallet, a ledger, or nothing (a manual entry)."
properties:
type:
type: string
description: The kind of source.
enum:
- CHARACTER
- CORPORATION
- LEDGER
- NONE
example: CHARACTER
characterId:
type:
- integer
- "null"
format: int64
description: "EVE character id, when the source is a character."
example: 2112625428
corporationId:
type:
- integer
- "null"
format: int64
description: "EVE corporation id, when the source is a corporation."
example: 98000001
division:
type:
- integer
- "null"
format: int32
description: "Corporation wallet division (1-7), when the source is a corporation\
\ and it is known."
example: 4
ledgerId:
type:
- string
- "null"
format: uuid
description: "Ledger id, when the source is a ledger."
example: 0199a1b2-c3d4-7e5f-8a90-1b2c3d4e5f60
required:
- characterId
- corporationId
- division
- ledgerId
- type
IskTransferResponse:
allOf:
- $ref: "#/components/schemas/TransferResponse"
- type: object
properties:
fromLedgerId:
type: string
format: uuid
description: Id of the ledger the ISK is debited from.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
toLedgerId:
type: string
format: uuid
description: Id of the ledger the ISK is credited to.
example: 5c1e6f2a-1234-4562-b3fc-2c963f66afa6
amount:
type: number
description: Amount of ISK transferred.
example: 1500000.0
description: A transfer of ISK from one ledger to another.
required:
- amount
- fromLedgerId
- toLedgerId
ItemTransferResponse:
allOf:
- $ref: "#/components/schemas/TransferResponse"
- type: object
properties:
fromLedgerId:
type: string
format: uuid
description: Id of the ledger the items are debited from.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
toLedgerId:
type: string
format: uuid
description: Id of the ledger the items are credited to.
example: 5c1e6f2a-1234-4562-b3fc-2c963f66afa6
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id transferred.
example: 34
quantity:
type: integer
format: int64
description: Number of units transferred.
example: 1000
description: A transfer of an item stack from one ledger to another.
required:
- fromLedgerId
- marketTypeId
- quantity
- toLedgerId
TransactionResponse:
type: object
description: "A transaction: a dated, described group of transfers between ledgers."
properties:
transactionId:
type: string
format: uuid
description: Unique transaction identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
source:
$ref: "#/components/schemas/ActivitySourceResponse"
description: "Where the transaction is attributed: a character, a corporation,\
\ or nothing."
datetime:
type: string
format: date-time
description: When the transaction occurred.
example: 2026-06-22T14:30:00
description:
type: string
description: Human-readable description of the transaction.
example: Market sale of Tritanium
transfers:
type: array
description: The transfers that make up this transaction.
items:
$ref: "#/components/schemas/TransferResponse"
required:
- datetime
- description
- source
- transactionId
- transfers
TransferResponse:
description: "A transfer between two ledgers, either of ISK or of an item stack."
discriminator:
propertyName: type
mapping:
ISK: "#/components/schemas/IskTransferResponse"
ITEM: "#/components/schemas/ItemTransferResponse"
oneOf:
- $ref: "#/components/schemas/IskTransferResponse"
- $ref: "#/components/schemas/ItemTransferResponse"
properties:
type:
type: string
required:
- type
DailyProfitResponse:
type: object
description: "Profit for a single day: ISK in, ISK out, and their difference."
properties:
date:
type: string
format: date
description: The UTC (EVE) day this profit is for.
example: 2026-06-22
iskIn:
type: number
description: Total ISK that entered the ledger on this day.
example: 1500000.0
iskOut:
type: number
description: Total ISK that left the ledger on this day.
example: 500000.0
profit:
type: number
description: "Profit for the day: iskIn minus iskOut."
example: 1000000.0
required:
- date
- iskIn
- iskOut
- profit
BalanceResponse:
type: object
description: "The balance of a ledger: its ISK total plus the quantity of each\
\ item type held."
properties:
iskBalance:
type: number
description: ISK balance of the ledger.
example: 1500000.0
itemBalances:
type: array
description: Per-item-type quantities held in the ledger.
items:
$ref: "#/components/schemas/ItemBalanceResponse"
required:
- iskBalance
- itemBalances
ItemBalanceResponse:
type: object
description: Quantity of a single item type held in a ledger.
properties:
typeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
quantity:
type: integer
format: int64
description: Number of units held.
example: 1000
required:
- quantity
- typeId
CorporationResponse:
type: object
description: An EVE Online corporation.
properties:
corporationId:
type: integer
format: int64
description: EVE corporation id.
example: 98000001
name:
type: string
description: Corporation name.
example: Center for Advanced Studies
ticker:
type: string
description: Corporation ticker.
example: CAS
allianceId:
type: integer
format: int64
description: "EVE alliance id, null when the corporation is not in an alliance."
example: 99000001
required:
- allianceId
- corporationId
- name
- ticker
SseEmitter:
type: object
properties:
timeout:
type: integer
format: int64
required:
- timeout
AcquisitionResponse:
type: object
description: "A single acquisition of a market type, tracking the remaining\
\ quantity available in the FIFO cost pool."
properties:
acquisitionId:
type: string
format: uuid
description: Unique acquisition identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
ledgerId:
type: string
format: uuid
description: Ledger the acquisition is held in.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
source:
$ref: "#/components/schemas/ActivitySourceResponse"
description: "Where the acquisition came from: a character, a corporation,\
\ or nothing."
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id that was acquired.
example: 34
datetime:
type: string
format: date-time
description: When the acquisition occurred.
example: 2026-06-22T14:30:00
quantity:
type: integer
format: int64
description: Quantity originally acquired.
example: 1000
remaining:
type: integer
format: int64
description: Quantity still remaining in the FIFO cost pool.
example: 250
unitCost:
type: number
description: "Cost per unit at acquisition time, in ISK."
example: 5.42
required:
- acquisitionId
- datetime
- ledgerId
- marketTypeId
- quantity
- remaining
- source
- unitCost