API Documentation

Use the same calculation engine as the web calculators for one specific reaction item per request.

Base URL: https://reactions.coalition.space/api/v1
Request model: Provide every required settings parameter. GET uses query string. POST accepts query + JSON body (JSON values override query values).
OpenAPI schema: https://reactions.coalition.space/api/v1/openapi.json
Interactive explorer: Open Swagger UI

Endpoints

All endpoints support GET and POST.

Biochemical

/biochemical/[type]/[id]

Allowed types: synth, standard, improved, improved_chain, strong, strong_chain, molecular

Type rules: improved_chain requires an improved blueprint id. strong_chain requires a strong blueprint id.

Composite

/composite/[type]/[id]

Allowed types: simple, complex, chain, unrefined, refined, eratic, eratic-repro

Type rules: chain requires a complex blueprint id. refined requires an unrefined blueprint id.

Hybrid

/hybrid/[id]

Allowed types: hybrid

Type rules: No [type] segment in the path for hybrid.


Required Parameters

All parameters below are required on every request. This includes values that are only actively used in certain scenarios (for example costIndex outside wormhole mode).

KeyTypeRequiredValid valuesNotes
inMarketstringyesAny tracked market system (e.g. Jita, Amarr, Perimeter)Input market system name
outMarketstringyesAny tracked market systemOutput market system name
systemstringyesReaction system name (e.g. Ignoitton)System used for cost index lookup
inputenumyesbuy | sellInput pricing mode
outputenumyesbuy | sellOutput pricing mode
brokersnumberyes0 to 10Broker fee percentage
salesnumberyes0 to 8Sales tax percentage
skillenumyes1 | 2 | 3 | 4 | 5Reactions skill level
facilityenumyesmedium | largeRefinery size
rigsenumyes0 | 1 | 2Rig tier
spaceenumyesnullsec | lowsec | wormholeSpace type
taxnumberyes0 to 100Industry tax percentage
sccnumberyes0 to 100SCC surcharge percentage
durationintegeryes1 to 43200 (minutes)Job duration in minutes
cyclesintegeryes1 to 100000Cycle count
costIndexnumberwormhole only0 to 100Manual cost index (primarily for wormhole workflows)
prismaticitenumberyes0 to 100Prismaticite luck percentage
Alias support: You can send indyTax instead of tax and sccTax instead of scc. You can also send includeMeta=false (query or JSON) to return only results.

Examples

1. GET (query string)

Great for spreadsheets or quick URL-driven integrations.

curl "https://reactions.coalition.space/api/v1/hybrid/30306?inMarket=Jita&outMarket=Jita&system=Ignoitton&input=buy&output=sell&brokers=3&sales=3.6&skill=5&facility=large&rigs=2&space=nullsec&tax=1&scc=4&duration=10080&cycles=50&prismaticite=50"

2. POST (biochemical, chain)

Example shows supported aliases (indyTax, sccTax).

curl -X POST "https://reactions.coalition.space/api/v1/biochemical/improved_chain/28686" \
	-H "Content-Type: application/json" \
	-d '{
		"inMarket": "Jita",
		"outMarket": "Jita",
		"system": "Ignoitton",
		"input": "buy",
		"output": "sell",
		"brokers": "3",
		"sales": "3.6",
		"skill": "5",
		"facility": "large",
		"rigs": "2",
		"space": "nullsec",
		"indyTax": "1",
		"sccTax": "4",
		"duration": "10080",
		"cycles": "50",
		"costIndex": "0",
		"prismaticite": "50"
	}'

3. POST (composite, refined)

curl -X POST "https://reactions.coalition.space/api/v1/composite/refined/57475" \
	-H "Content-Type: application/json" \
	-d '{
		"inMarket": "Jita",
		"outMarket": "Jita",
		"system": "Ignoitton",
		"input": "buy",
		"output": "sell",
		"brokers": "3",
		"sales": "3.6",
		"skill": "5",
		"facility": "large",
		"rigs": "2",
		"space": "wormhole",
		"tax": "1",
		"scc": "4",
		"duration": "10080",
		"cycles": "50",
		"costIndex": "4.5",
		"prismaticite": "50"
	}'

4. Success response shape

{
	"meta": {
		"version": "v1",
		"calculator": "hybrid",
		"type": "hybrid",
		"itemId": 30306,
		"count": 1,
		"timestamp": "2026-02-19T20:15:10.823Z",
		"params": {
			"inMarket": "Jita",
			"outMarket": "Jita",
			"system": "Ignoitton",
			"input": "buy",
			"output": "sell",
			"brokers": "3",
			"sales": "3.6",
			"skill": "5",
			"facility": "large",
			"rigs": "2",
			"space": "nullsec",
			"tax": "1",
			"scc": "4",
			"duration": "10080",
			"cycles": "50",
			"prismaticite": "50"
		}
	},
	"results": [
		{
			"name": "Example Reaction",
			"profit": 1234567.89,
			"profit_per": 14.23
		}
	]
}

5. Error response example (400)

{
	"error": "Invalid value for space: 'highsec'. Allowed values: nullsec, lowsec, wormhole",
	"code": "INVALID_VALUE",
	"details": {
		"key": "space",
		"allowed": ["nullsec", "lowsec", "wormhole"],
		"value": "highsec"
	}
}

6. GET without meta (spreadsheet-friendly)

curl "https://reactions.coalition.space/api/v1/hybrid/30306?inMarket=Jita&outMarket=Jita&system=Ignoitton&input=buy&output=sell&brokers=3&sales=3.6&skill=5&facility=large&rigs=2&space=nullsec&tax=1&scc=4&duration=10080&cycles=50&prismaticite=50&includeMeta=false"

7. OpenAPI schema

curl "https://reactions.coalition.space/api/v1/openapi.json"

Status Codes

  • 200 - Successful calculation
  • 400 - Missing/invalid request parameters, invalid type, invalid id/type combination
  • 404 - Blueprint id not found in that calculator group
  • 413 - Request body exceeds size limit
  • 429 - Rate limit exceeded
  • 500 - Internal server or unavailable platform bindings/data

Error Codes

Every non-200 response includes a machine-readable code field.

  • MISSING_PARAMS, INVALID_JSON, INVALID_BODY
  • INVALID_VALUE, INVALID_NUMBER, INVALID_INTEGER, INVALID_RANGE
  • INVALID_ITEM_ID, INVALID_TYPE, TYPE_ID_MISMATCH
  • BLUEPRINT_NOT_FOUND, ENV_UNAVAILABLE, INTERNAL_ERROR
  • PAYLOAD_TOO_LARGE, RATE_LIMITED

Guardrails

  • Body size: POST requests are limited to 16 KB.
  • Rate limit: approximately 90 requests / 60 seconds per IP and endpoint path.