Inara API Documentation

Data format

Inara API requires JSON data as an input and returns also JSON as the output. Both consists from 'header' (user/app identification) and 'events' (main part) blocks. The data returned are always in the order as they were sent, doesn't matter the timestamps. If there are no data returned, something went wrong and you should try to send the request again after some time (please set reasonable timeouts and retry rates, there is no point to spam retry requests each second as Inara may be currently temporarily down for maintenance and similar).

See more details, data format examples and properties below.

Input properties
Property nameProperty typeDescription
appNamestringName of the application used
appVersionstringVersion of the application (like: '1.2.4', please keep this standard versioning format as there may be a version control in effect)
isDevelopedbooleanIf you are developing the application and/or testing new updates, please set this as 'true'. This setting will skip the updates for global events like setCommunityGoal, which may otherwise cause the problems with your test data. Please note that newly accepted applications in development has this set by default on server side, but don't rely on it and set it on your side, too.
APIkeystringUser's personal API key (set by user) or generic application key (for general read-only events)
commanderNamestringIn-game CMDR name of user (not set by user, get this from journals or cAPI to ensure it is a correct in-game name to avoid future problems). It is recommended to be always set when no generic API key is used (otherwise some events may not work).
commanderFrontierIDstringCommander's unique Frontier ID (is provided by journals since 3.3) in a format: 'F123456' or '123456'. When not known, set nothing.
Properties marked as red are required.

Output properties
Property nameProperty typeDescription
eventStatusintegerEvent status code (see eventStatus codes).
eventStatusTextstringTextual explanation of status on errors and warnings. It is returned just on error states.
eventDatamixedReturned basic user identification like Inara user ID and Inara user name, when no generic API key was used and the authorization was successful.
Input properties
Property nameProperty typeDescription
eventNamestringName of the event/method
eventTimestampstringDate and time in ISO 8601 format (like: 2017-05-02T17:30:49Z). Always use a correct date and time related to the event (from the journals), for example when commander achieved a new rank, when was ship bought and so on. If there is no date/time directly related to the event, just use the actual time. The date/time provided shouldn't be older than 30 days.
eventCustomIDintegerOptional custom event ID by your choice, used for the output (like: 1234)
eventDatamixedRequired event properties/data. See more details about individual event properties in the events documentation.
Properties marked as red are required.

Output properties
Property nameProperty typeDescription
eventCustomIDintegerYour event custom identifier, when set in the request. May help you to better pair your requests with results.
eventStatusintegerEvent status code (see eventStatus codes).
eventStatusTextstringTextual explanation of the status code on errors and warnings. It is returned just on error states.
eventDatamixedReturned data based on the event (if any). See events documentation for the details.
{
    "header": {
        "appName": "MyInaraApp",
        "appVersion": "1.01",
        "isDeveloped": true,
        "APIkey": "fdg58sdf48gf8asd1",
        "commanderName": "Artie",
        "commanderFrontierID": "F123456"
    },
    "events": [
        {
            "eventName": "getCommanderProfile",
            "eventTimestamp": "2017-05-02T17:30:49Z",
            "eventData": {
                "searchName": "artie"
            }
        },
        {
            "eventName": "getCommanderProfile",
            "eventTimestamp": "2017-05-02T17:30:50Z",
            "eventCustomID": 1234,
            "eventData": {
                "searchName": "RumburakCoNeniOdArabely"
            }
        }
    ]
}
{
    "header": {
        "eventStatus": 200,
        "eventData": {
            "userID": 1,
            "userName": "Artie"
        }
    },
    "events": [
        {
            "eventStatus": 200,
            "eventData": {
                "userID": 1,
                "userName": "Artie",
                "ranks": {
                    "combat": 8,
                    "trade": 7,
                    "exploration": 6
                }
            }
        },
        {
            "eventCustomID": 1234,
            "eventStatus": 204,
            "eventStatusText": "No results found."
        }
    ]
}
  • 200 - OK
  • 202 - Warning (everything is OK, but there may be multiple results for the input properties, etc.)
  • 204 - 'Soft' error (everything was formally OK, but there are no results for the properties set, etc.)
  • 400 - Error (you probably did something wrong, there are properties missing, etc. The event was skipped or whole batch cancelled on failed authorization.)

Events

Commander's profile and misc

addCommanderFriend

Adds a friend request to the target commander on Inara. The request may not be performed when such commander is not found under his/her in-game name.

eventData input properties
Property nameProperty typeDescription
commanderNamestringIn-game name of the target commander.
gamePlatformstringTarget commander's game platform, values are: ['pc', 'xbox', 'ps4']. May serve as an override to the global platform settings in the future.
Properties marked as red are required.
{
   "eventName": "addCommanderFriend",
   "eventTimestamp": "2017-05-02T17:30:49Z",
   "eventData": {
       "commanderName": "Rumbakoule",
       "gamePlatform": "xbox"
   }
},
{
   "eventStatus": 200
}

delCommanderFriend

Removes a target commander from the friends list on Inara. The request may not be performed when such commander is not found under his/her in-game name.

eventData input properties
Property nameProperty typeDescription
commanderNamestringIn-game name of the target commander.
gamePlatformstringTarget commander's game platform, values are: ['pc', 'xbox', 'ps4']. May serve as an override to the global platform settings in the future.
Properties marked as red are required.
{
   "eventName": "delCommanderFriend",
   "eventTimestamp": "2017-05-02T17:30:49Z",
   "eventData": {
       "commanderName": "Rumbakoule",
       "gamePlatform": "xbox"
   }
},
{
   "eventStatus": 200
}

getCommanderProfile

Returns basic information about commander from Inara like ranks, squadron, etc.

This event can be used with the generic API key.
eventData input properties
Property nameProperty typeDescription
searchNamestringCommander's name. The input name provided is used for the exact match search against the in-game commander names. If no record found, it is then used as a search string in the Inara user names and if the name doesn't match exactly, the first result of the search is returned. If there is no input name provided and personal API key is used, the profile of the current user is returned.
Properties marked as red are required.
Note: The 'commanderName' in the output is returned just when the 'searchName' and commander's in-game name exactly match (and is known). When there is no exact match, other possible names are returned in the 'otherNamesFound' list (up to 20 records).
        {
            "eventCustomID": 13458,
            "eventName": "getCommanderProfile",
            "eventTimestamp": "2017-05-02T17:30:49Z",
            "eventData": {
                "searchName": "artie"
            }
        }
{
   "eventCustomID": 13458,
   "eventStatus": 200,
   "eventData": {
       "userID": 1,
       "userName": "Artie",
       "commanderName": "Artie",
       "commanderRanksPilot": [
           {
               "rankName": "combat",
               "rankValue": 7,
               "rankProgress": 0.40000000000000002
           },
           {
               "rankName": "trade",
               "rankValue": 8,
               "rankProgress": 1
           },
           {
               "rankName": "exploration",
               "rankValue": 6,
               "rankProgress": 0.11
           },
           {
               "rankName": "cqc",
               "rankValue": 2,
               "rankProgress": 0.089999999999999997
           },
           {
               "rankName": "empire",
               "rankValue": 12,
               "rankProgress": 0.17000000000000001
           },
           {
               "rankName": "federation",
               "rankValue": 11,
               "rankProgress": 0.65000000000000002
           }
       ],
       "preferredAllegianceName": "Independent",
       "preferredPowerName": "Felicia Winters",
       "commanderSquadron": {
           "SquadronID": 5,
           "SquadronName": "Inara Test Wing",
           "SquadronMembersCount": 8,
           "SquadronMemberRank": "Squadron commander",
           "inaraURL": "https:\/\/inara.cz\/squadron\/5\/"
       },
       "preferredGameRole": "Freelancer",
       "avatarImageURL": "https:\/\/inara.cz\/data\/users\/0\/1x1548.jpg",
       "inaraURL": "https:\/\/inara.cz\/cmdr\/1\/",
       "otherNamesFound": [
                    "Artiex2",
                    "Artieblahblah"
       ]
   }
}

Commander's credits, assets and permits

addCommanderPermit

Adds star system permit for the commander. You do not need to handle permits granted for the Pilots Federation or Navy rank promotion, but you should handle any other ways (like mission rewards).

Warning: The permits list is not implemented on Inara yet (will be available fairly soon), but you can handle this in advance.

eventData input properties
Property nameProperty typeDescription
starsystemNamestringName of the starsystem for which is the permit granted.
Properties marked as red are required.
{
   "eventName": "addCommanderPermit",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "starsystemName": "Alioth"
   }
}
{
   "eventStatus": 200
}

setCommanderCredits

Sets current credits, assets and loans and a record is added to the credits log (if the credits/assets value differs).

Warning: Do NOT set credits/assets unless you are absolutely sure they are correct. The journals currently doesn't contain crew wage cuts, so credit gains are very probably off for most of the players. Also, please, do not send each minor credits change, as it will spam player's credits log with unusable data and they won't be most likely very happy about it. It may be good to set credits just on the session start, session end and on the big changes or in hourly intervals.
There may be some separate transaction log for every minor credits change introduced later, which won't mess player's main credits log.

eventData input properties
Property nameProperty typeDescription
commanderCreditsintegerCommander's actual credits.
commanderAssetsintegerActual current assets value. When no assets value provided, assets value is calculated (based on Inara data).
commanderLoanintegerCommander's actual loans (if any). When no loan value provided, it will be set to zero.
Properties marked as red are required.
{
   "eventName": "setCommanderCredits",
   "eventTimestamp": "2017-05-02T17:30:49Z",
   "eventData": {
       "commanderCredits": 800,
       "commanderAssets": 2400,
       "commanderLoan": 100
   }
},
{
   "eventStatus": 200
}

Commander's ranks, reputation and stats

setCommanderGameStatistics

Sets commander's in-game statistics. Please note that the statistics are always overridden as a whole, so any partial updates will cause erasing of the rest.

eventData input properties
Property nameProperty typeDescription
[array]mixedTo make things simple, the input array structure and properties are exactly as provided by the journals, so you may just pass it to API. See input JSON example for the details.
Properties marked as red are required.
{
   "eventName": "setCommanderGameStatistics",
   "eventTimestamp": "2018-01-27T17:30:49Z",
   "eventData": {
       "Bank_Account": {
           "Current_Wealth": 1560432,
           "Spent_On_Ships": 480000,
           "Spent_On_Outfitting": 200000,
           "Spent_On_Repairs": 5600,
           "Spent_On_Fuel": 340,
           "Spent_On_Ammo_Consumables": 10,
           "Insurance_Claims": 0,
           "Spent_On_Insurance": 0
       },
       "Combat": {
           "Bounties_Claimed": 5,
           "Bounty_Hunting_Profit": 8400,
           "Combat_Bonds": 0,
           "Combat_Bond_Profits": 0,
           "Assassinations": 1,
           "Assassination_Profits": 25000,
           "Highest_Single_Reward": 12400,
           "Skimmers_Killed": 0
       }
       // .... and so on
   }
}
{
   "eventStatus": 200
}

setCommanderRankEngineer

Sets rank progress with the individual Engineer. If there is a newer value already stored (compared by timestamp), the update is ignored.

eventData input properties
Property nameProperty typeDescription
engineerNamestringEngineer name as is in the journals
rankStagestringRank stage name as is in the journals, possible values are: ['Invited', 'Acquainted', 'Unlocked', 'Barred']
rankValueintegerRank value when the engineer is unlocked (range [1..5])
Properties marked as red are required.
Note: 'rankStage' and 'rankValue' properties aren't required, but there should be at least one property set. When the 'rankValue' is set, engineer will be in a stage 'Unlocked', doesn't matter what was set.
You can use an array of parameters to set multiple items at once. See input JSON example for more details.
{
   "eventName": "setCommanderRankEngineer",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "engineerName": "Elvira Martuuk",
       "rankStage": "Unlocked",
       "rankValue": 4
   }
}

You can also set multiple engineers at once:

{
   "eventName": "setCommanderRankPilot",
   "eventTimestamp": "2017-05-02T17:30:49Z",
   "eventData": [
       {
          "engineerName": "Elvira Martuuk",
          "rankStage": "Unlocked",
          "rankValue": 4
       },
       {
          "engineerName": "Liz Ryder",
          "rankStage": "Unlocked",
          "rankValue": 2
       }
   ]
}
{
   "eventStatus": 200
}

setCommanderRankPilot

Sets commander Elite and Navy ranks. You can set just rank or its progress or both at once. If there is a newer value already stored (compared by timestamp), the update is ignored. Possible star system permits tied to ranks are awarded to the commander automatically.

eventData input properties
Property nameProperty typeDescription
rankNamestringPilots federation/Navy rank name as are in the journals (["combat", "trade", "explore", "cqc", "federation", "empire"])
rankValueintegerRank value (range [0..8] for Pilots federation ranks, range [0..14] for Navy ranks)
rankProgressfloatRank progress (range: [0..1], which corresponds to 0% - 100%)
Properties marked as red are required.
Note: 'rankValue' and 'rankProgress' properties aren't required, but there should be at least one property set.
You can use an array of parameters to set multiple items at once. See input JSON example for more details.
{
   "eventName": "setCommanderRankPilot",
   "eventTimestamp": "2017-05-02T17:30:49Z",
   "eventData": {
       "rankName": "combat",
       "rankValue": 3,
       "rankProgress": 0.42
   }
}

You can also set multiple ranks at once:

{
   "eventName": "setCommanderRankPilot",
   "eventTimestamp": "2017-05-02T17:30:49Z",
   "eventData": [
       {
          "rankName": "combat",
          "rankValue": 3,
          "rankProgress": 0.42
       },
       {
          "rankName": "trade",
          "rankValue": 2,
          "rankProgress": 0.31
       },
       {
          "rankName": "explore",
          "rankValue": 5,
          "rankProgress": 0.67
       }
   ]
}
{
   "eventStatus": 200
}

setCommanderRankPower

Sets commander pledged power rank, related to Powerplay. If there is a newer value already stored (compared by timestamp), the update is ignored.

eventData input properties
Property nameProperty typeDescription
powerNamestringName of a power
rankValueintegerPower rank value in a range [0..5]. When player is leaving a power, just set a rankValue [0] for this power. When player is defecting to another power, just set a rankValue [1..5] for the new power. There is no need to erase a rank of the previous power first, it is made automatically.
Properties marked as red are required.
{
   "eventName": "setCommanderRankPower",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "powerName": "Felicia Winters",
       "rankValue": 2
   }
}
{
   "eventStatus": 200
}

setCommanderReputationMajorFaction

Sets commander's reputation with the major factions like Federation, Empire, etc.

eventData input properties
Property nameProperty typeDescription
majorfactionNamestringMajor faction name as is in the journals ("federation", "empire"], ...)
majorfactionReputationfloatReputation progress in a range: [-1..1], which corresponds to a reputation range from -100% (hostile) to 100% (allied).
Properties marked as red are required.
You can use an array of parameters to set multiple items at once. See input JSON example for more details.
{
   "eventName": "setCommanderReputationMajorFaction",
   "eventTimestamp": "2017-05-02T17:30:49Z",
   "eventData": {
       "majorfactionName": "empire",
       "majorfactionReputation": 0.84
   }
}

You can also set multiple faction reputations at once:

{
   "eventName": "setCommanderRankPilot",
   "eventTimestamp": "2017-05-02T17:30:49Z",
   "eventData": [
       {
          "majorfactionName": "empire",
          "majorfactionReputation": 0.84
       },
       {
          "majorfactionName": "federation",
          "majorfactionReputation": 0.36
       }
   ]
}
{
   "eventStatus": 200
}

setCommanderReputationMinorFaction

Sets commander's reputation with the minor faction. The values can be found in journal's FSDJump and Location events, as a MyReputation property.

eventData input properties
Property nameProperty typeDescription
minorfactionNamestringMinor faction name as is in the journals
minorfactionReputationfloatReputation progress in a range: [-1..1], which corresponds to a reputation range from -100% (hostile) to 100% (allied).
Properties marked as red are required.
You can use an array of parameters to set multiple items at once. See input JSON example for more details.
{
   "eventName": "setCommanderReputationMinorFaction",
   "eventTimestamp": "2017-05-02T17:30:49Z",
   "eventData": {
       "minorfactionName": "Inara Nexus",
       "minorfactionReputation": 0.76
   }
}

You can also set multiple faction reputations at once:

{
   "eventName": "setCommanderRankPilot",
   "eventTimestamp": "2017-05-02T17:30:49Z",
   "eventData": [
       {
          "minorfactionName": "Inara Nexus",
          "minorfactionReputation": 0.76
       },
       {
          "minorfactionName": "Inara Independents",
          "minorfactionReputation": 0.24
       }
   ]
}
{
   "eventStatus": 200
}

Commander's inventory - cargo

addCommanderInventoryCargoItem

Adds a specified count of the individual item to the commander's cargo.
Note: Don't forget to correctly remove/add cargo commodities or materials also on journal events like MiningRefined, ScientificResearch, SearchAndRescue, Synthesis, EngineerCraft, EngineerContribution, etc.

eventData input properties
Property nameProperty typeDescription
itemNamestringA commodity/item name as is in the journals.
itemCountintegerCount of items.
isStolenbooleanWhether is the item stolen or not. It is not used on Inara at this moment, but you can set it.
missionGameIDintegerSet when the item is related to a (hauling/courier/etc.) mission (not the reward). It is not used on Inara at this moment, but you can set it.
Properties marked as red are required.
{
   "eventName": "addCommanderInventoryCargoItem",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "itemName": "conductivefabrics",
       "itemCount": 3,
       "isStolen": true
   }
}
{
   "eventStatus": 200
}

delCommanderInventoryCargoItem

Removes a specified count of the individual item from the commander's cargo.
Note: Don't forget to correctly remove/add cargo commodities or materials also on journal events like MiningRefined, ScientificResearch, SearchAndRescue, Synthesis, EngineerCraft, EngineerContribution, etc.

eventData input properties
Property nameProperty typeDescription
itemNamestringA commodity/item name as is in the journals.
itemCountintegerCount of items.
isStolenbooleanWhether the item was stolen or not. It is not used on Inara at this moment, but you can set it.
missionGameIDintegerSet when the item was related to a (hauling/courier/etc.) mission (not the reward). It is not used on Inara at this moment, but you can set it.
Properties marked as red are required.
{
   "eventName": "delCommanderInventoryCargoItem",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "itemName": "modularterminals",
       "itemCount": 4,
       "missionGameID": 170577201
   }
}
{
   "eventStatus": 200
}

setCommanderInventoryCargo

Sets commander's cargo (commodities in the ship). This event will erase whole cargo and sets it anew. The limpets/drones are also counted as cargo, the passengers are not (well, except slaves ;) ).

eventData input properties
Property nameProperty typeDescription
itemNamestringA commodity/item name as is in the journals. The lower/upper cases doesn't matter.
itemCountintegerCount of items.
isStolenbooleanWhether is the item stolen or not. It is not used on Inara at this moment, but you can set it.
missionGameIDintegerSet when the item is related to a (hauling/courier/etc.) mission (not the reward). It is not used on Inara at this moment, but you can set it.
Properties marked as red are required.
Please note that eventData items are separated in individual arrays, see the example input for the data format. You can also set the same item with different 'isStolen' or 'isMissionItem' flags, as is in the example.
{
   "eventName": "setCommanderInventoryCargo",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": [
       {
           "itemName": "conductivefabrics",
           "itemCount": 1
       },
       {
           "itemName": "modularterminals",
           "itemCount": 6
       },
       {
           "itemName": "modularterminals",
           "itemCount": 2,
           "isStolen": true
       },
       {
           "itemName": "cobalt",
           "itemCount": 6,
           "missionGameID": 170577201
       }
   ]
}
{
   "eventStatus": 200
}

setCommanderInventoryCargoItem

Sets a specified count of the individual item in the commander's cargo. If no item is present in the cargo, it is added. When count is set to zero, the item is removed.

eventData input properties
Property nameProperty typeDescription
itemNamestringA commodity/item name as is in the journals.
itemCountintegerCount of items.
isStolenbooleanWhether is the item stolen or not. It is not used on Inara at this moment, but you can set it.
missionGameIDintegerSet when the item is related to a (hauling/courier/etc.) mission (not the reward). It is not used on Inara at this moment, but you can set it.
Properties marked as red are required.
{
   "eventName": "setCommanderInventoryCargoItem",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "itemName": "cobalt",
       "itemCount": 11,
       "missionGameID": 170577201
   }
}
{
   "eventStatus": 200
}

Commander's inventory - materials

addCommanderInventoryMaterialsItem

Adds a specified count of the individual material to the commander's inventory.
Note: Don't forget to correctly remove/add cargo commodities or materials also on journal events like MiningRefined, ScientificResearch, SearchAndRescue, Synthesis, EngineerCraft, EngineerContribution, etc.

eventData input properties
Property nameProperty typeDescription
itemNamestringA material/item name as is in the journals.
itemCountintegerCount of items.
Properties marked as red are required.
{
   "eventName": "addCommanderInventoryMaterialsItem",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "itemName": "nickel",
       "itemCount": 2
   }
}
{
   "eventStatus": 200
}

delCommanderInventoryMaterialsItem

Removes a specified count of the individual material from the commander's inventory.
Note: Don't forget to correctly remove/add cargo commodities or materials also on journal events like MiningRefined, ScientificResearch, SearchAndRescue, Synthesis, EngineerCraft, EngineerContribution, etc.

eventData input properties
Property nameProperty typeDescription
itemNamestringA material/item name as is in the journals.
itemCountintegerCount of items.
Properties marked as red are required.
{
   "eventName": "delCommanderInventoryMaterialsItem",
   "eventTimestamp": "2017-10-28T17:30:50Z",
   "eventData": {
       "itemName": "crystalshards",
       "itemCount": 2
   }
}
{
   "eventStatus": 200
}

setCommanderInventoryMaterials

Sets commander's materials (components for crafting). This event will erase whole materials inventory and sets it anew.

eventData input properties
Property nameProperty typeDescription
itemName [in array]stringA material/item name as is in the journals.
itemCount [in array]integerCount of items.
Properties marked as red are required.
Please note that eventData items are separated in individual arrays, see the example input for the data format.
{
   "eventName": "setCommanderInventoryMaterials",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": [
       {
           "itemName": "phosphorus",
           "itemCount": 30
       },
       {
           "itemName": "nickel",
           "itemCount": 10
       },
       {
           "itemName": "crystalshards",
           "itemCount": 20
       }
   ]
}
{
   "eventStatus": 200
}

setCommanderInventoryMaterialsItem

Sets a specified count of the individual material in the commander's inventory. If no material is present in the inventory, it is added. When count is set to zero, the material is removed.

eventData input properties
Property nameProperty typeDescription
itemNamestringA material/item name as is in the journals. The lower/upper cases doesn't matter.
itemCountintegerCount of items.
Properties marked as red are required.
{
   "eventName": "setCommanderInventoryMaterialsItem",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "itemName": "crystalshards",
       "itemCount": 15
   }
}
{
   "eventStatus": 200
}

Commander's storage

setCommanderStorageModules

Sets commander's stored modules. The storage content is always erased and set anew, so when no modules list is provided, the storage will be just emptied.

eventData input properties
Property nameProperty typeDescription
itemNamestringA module name as is in the journals.
itemValueintegerA module value in credits.
isHotbooleanSet when the module is 'hot' (crime&punishment flag).
starsystemNamestringStar system where the module is stored.
stationNamestringStation where the module is stored.
marketIDintegerThe market ID of the station. When provided, it is used as a primary location identifier. But, please always provide also the starsystemName and stationName (when known) for a case the market ID won't be found.
engineeringmixedSet of module properties, when engineered (like blueprint name, modification level, etc.)
Properties marked as red are required.
Please note that eventData items are separated in individual arrays, see the example input for the data format. Some properties as 'experimentalEffect' may not be present in the journals at this moment.
The modules without location set are considered as in transit.
{
   "eventName": "setCommanderStorageModules",
   "eventTimestamp": "2018-01-27T17:30:49Z",
   "eventData": [
       {
           "itemName": "$hpt_pulselaser_gimbal_large_name",
           "itemValue": 350640,
           "isHot": true,
           "starsystemName": "Sol",
           "stationName": "Abraham Lincoln",
           "marketID": 128016896,
           "engineering": {
               "blueprintName": "Weapon_Overcharged",
               "blueprintLevel": 4,
               "blueprintQuality": 0,
               "experimentalEffect": "special_incendiary_rounds"
           }
       },
       {
           "itemName": "$int_cargorack_size7_class1_name",
           "itemValue": 12800,
           "isHot": false,
           "starsystemName": "Sol",
           "stationName": "Abraham Lincoln",
           "marketID": 128016896
       },
       {
           "itemName": "$int_dronecontrol_collection_size5_class5_name",
           "itemValue": 4500,
           "starsystemName": "Inara",
           "stationName": "Citi Gateway",
           "marketID": 3226573056
       }
   ]
}
{
   "eventStatus": 200
}

Commander's fleet/ships

addCommanderShip

Adds a ship to the commander's fleet. A log record is added, the new ship bought is automatically set as current. The ship ID on Inara is returned.
Note: This event may handle multiple journal events or require multiple journal events. Also, it doesn't handle old ship selling or storing and credit changes, you should handle this separately. Please see Journal to JSON example for the details.

eventData input properties
Property nameProperty typeDescription
shipTypestringShip type/name as is in the journals/cAPI (like: 'sidewinder')
shipGameIDintegerShip game ID as is in the journals/cAPI.
Properties marked as red are required.
{
   "eventName": "addCommanderShip",
   "eventTimestamp": "2017-10-28T17:39:30Z",
   "eventData": {
       "shipType": "Sidewinder",
       "shipGameID": 7
   }
}
{
   "eventStatus": 200,
   "eventData": {
       "shipInaraID": 285788,
       "shipInaraURL": "https:\/\/inara.cz\/cmdr-fleet\/1\/285788\/"
   }
}
Buying a new ship is made in two events in the journals (taken from the example in the Journal manual):
{ "timestamp":"2016-07-21T14:36:38Z", "event":"ShipyardBuy", "ShipType":"hauler", "ShipPrice":46262, "StoreOldShip":"SideWinder", "StoreShipID":2 }
{ "timestamp":"2016-07-21T14:36:38Z", "event":"ShipyardNew", "ShipType":"hauler", "ShipID":4 }

These events translates to the following (the old ship is stored at the current commander's location, you should eventually also handle the credits/assets change and setting the ship's hull/modules value):
{
   "eventName": "setCommanderShip",
   "eventTimestamp": "2016-07-21T14:36:38Z",
   "eventData": {
       "shipType": "SideWinder",
       "shipGameID": 2,
       "starsystemName": "Sol",
       "stationName": "Abraham Lincoln"
   }
},
{
   "eventName": "addCommanderShip",
   "eventTimestamp": "2016-07-21T14:36:38Z",
   "eventData": {
       "shipType": "hauler",
       "shipGameID": 4
   }
}


The similar case, but when the old ship is sold: { "timestamp":"2016-07-21T14:36:38Z", "event":"ShipyardBuy", "ShipType":"hauler", "ShipPrice":46262, "SellOldShip:":"SideWinder", "SellShipID":2, "SellPrice":35600 } { "timestamp":"2016-07-21T14:36:38Z", "event":"ShipyardNew", "ShipType":"hauler", "ShipID":4 } It translates to the following (the old ship is sold/removed): { "eventName": "delCommanderShip", "eventTimestamp": "2016-07-21T14:36:38Z", "eventData": { "shipType": "SideWinder", "shipGameID": 2 } }, { "eventName": "addCommanderShip", "eventTimestamp": "2016-07-21T14:36:38Z", "eventData": { "shipType": "hauler", "shipGameID": 4 } }

delCommanderShip

Removes a ship from the commander's fleet. A log record is added.
Note: This event may handle multiple journal events or require multiple journal events. Also, it doesn't handle credit changes and you should handle this separately. Please see Journal to JSON example for the details.

Please note that the ship may not be removed when it was previously entered manually on Inara and has gameID missing (unless it was updated by 'setCommanderShip' before). It is just a measure to prevent wrong ship removal.

eventData input properties
Property nameProperty typeDescription
shipTypestringShip type/name as is in the journals/cAPI (like: 'sidewinder')
shipGameIDintegerShip game ID as is in the journals/cAPI.
Properties marked as red are required.
{
   "eventName": "delCommanderShip",
   "eventTimestamp": "2017-10-28T17:42:20Z",
   "eventData": {
       "shipType": "Sidewinder",
       "shipGameID": 7
   }
}
{
   "eventStatus": 200
}
Selling the old ship in the journals (taken from the example in the Journal manual):
{ "timestamp":"2016-07-21T15:12:19Z", "event":"ShipyardSell", "ShipType":"Adder", "SellShipID":6, "ShipPrice":79027, "System":"Eranin" }

This event translates to the following (and you should eventually also handle the credits/assets change). This also apply for the journal event 'SellShipOnRebuy':
{
   "eventName": "delCommanderShip",
   "eventTimestamp": "2016-07-21T15:12:19Z",
   "eventData": {
       "shipType": "Adder",
       "shipGameID": 6
   }
}


The ship selling also needs to be handled when the new ship is bought and the old one is sold: { "timestamp":"2016-07-21T14:36:38Z", "event":"ShipyardBuy", "ShipType":"hauler", "ShipPrice":46262, "SellOldShip:":"SideWinder", "SellShipID":2, "SellPrice":35600 } { "timestamp":"2016-07-21T14:36:38Z", "event":"ShipyardNew", "ShipType":"hauler", "ShipID":4 } It translates to the following (the old ship is sold/removed): { "eventName": "delCommanderShip", "eventTimestamp": "2016-07-21T14:36:38Z", "eventData": { "shipType": "SideWinder", "shipGameID": 2 } }, { "eventName": "addCommanderShip", "eventTimestamp": "2016-07-21T14:36:38Z", "eventData": { "shipType": "hauler", "shipGameID": 4 } }
The ship swapping where the old ship is sold is pretty similar: { "timestamp":"2016-07-21T14:36:06Z", "event":"ShipyardSwap", "ShipType":"sidewinder", "ShipID":10, "SellOldShip":"Asp", "SellShipID":2 } It is translated to the following: { "eventName": "delCommanderShip", "eventTimestamp": "2016-07-21T14:36:06Z", "eventData": { "shipType": "Asp", "shipGameID": 2 } }, { "eventName": "setCommanderShip", "eventTimestamp": "2016-07-21T14:36:06Z", "eventData": { "shipType": "sidewinder", "shipGameID": 10, "isCurrentShip": true } }

setCommanderShip

Sets the ship properties like name, ident, hull and modules value, etc. When no ship is found with the 'shipType' and 'shipGameID' set, it is automatically added to commander's fleet. The ship's configuration/loadout is handled by the separate event. The ship ID on Inara is returned as a result.
Note: This event may handle multiple journal events or require multiple journal events. Please see Journal to JSON example for the details.

eventData input properties
Property nameProperty typeDescription
shipTypestringShip type/name as is in the journals/cAPI (like: 'sidewinder')
shipGameIDintegerShip game ID as is in the journals/cAPI.
shipNamestringName of the ship.
shipIdentstringThe ship identification (like: 'AF-47K').
isCurrentShipbooleanWhen set the ship is identified as a ship that is currently flown by commander. It also resets 'current' status on any other ship.
isMainShipbooleanWhen set the ship is identified and commander's main/favorite ship. This flag is not related to journals/cAPI, it is purely Inara stuff. This also resets 'main' status on any other ship.
isHotbooleanSet when the ship is "hot" (crime&punishment flag, not when the ship is overheating).
shipHullValueintegerThe value of 'barebone' ship, hull without any modules. Please note that this value may not be always present in the journals.
shipModulesValueintegerThe value of all modules on the ship. Same as hull value, it may not be always present.
shipRebuyCostintegerThe ship's rebuy cost.
starsystemNamestringThe name of the starsystem where is the ship docked (when not flown or in transfer).
stationNamestringThe name of the station where is the ship docked.
marketIDintegerThe market ID of the station. When provided, it is used as a primary location identifier. But, please always provide also the starsystemName and stationName (when known) for a case the market ID won't be found.
Properties marked as red are required.
Although most properties aren't required, there should be at least one of them set. The 'isCurrentShip' or 'isMainShip' flag set to 'false' does nothing, as another ship must be set as current/main and the flags are reset that way.
{
   "eventName": "setCommanderShip",
   "eventTimestamp": "2017-10-28T17:40:20Z",
   "eventData": {
       "shipType": "Sidewinder",
       "shipGameID": 7,
       "shipName": "Goldie",
       "shipIdent": "OK-475",
       "isCurrentShip": true,
       "isMainShip": true,
       "isHot": false,
       "shipHullValue": 35000,
       "shipModulesValue": 126540,
       "shipRebuyCost": 15400,
       "starsystemName": "Inara",
       "stationName": "Citi Gateway"
   }
}
{
   "eventStatus": 200,
   "eventData": {
       "shipInaraID": 285788,
       "shipInaraURL": "https:\/\/inara.cz\/cmdr-fleet\/1\/285788\/"
   }
}
A common use is for a Loadout event or SetUserShipName events like the following (example from the Journal manual):
{ "timestamp":"2017-01-24T10:42:38Z", "event":"SetUserShipName", "Ship":"cobramkiii","ShipID":2, "UserShipName":"Enterprise", "UserShipId":"NCC 1701" }

This event is translated to the following (just the name and ident is set):
{
   "eventName": "setCommanderShip",
   "eventTimestamp": "2017-01-24T10:42:38Z",
   "eventData": {
       "shipType": "cobramkiii",
       "shipGameID": 2,
       "shipName": "Enterprise",
       "shipIdent": "NCC 1701"
   }
}


Another case is the ship swapping in the journals: { "timestamp":"2016-07-21T14:36:06Z", "event":"ShipyardSwap", "ShipType":"sidewinder", "ShipID":10, "StoreOldShip":"Asp", "StoreShipID":2 } This event is translated to the following, where the old ship is docked and the new ship set as current. Be aware that ShipyardSwap also may sell the old ship instead of storing it. { "eventName": "setCommanderShip", "eventTimestamp": "2016-07-21T14:36:06Z", "eventData": { "shipType": "Asp", "shipGameID": 2, "starsystemName": "Sol", "stationName": "Abraham Lincoln" } }, { "eventName": "setCommanderShip", "eventTimestamp": "2016-07-21T14:36:06Z", "eventData": { "shipType": "sidewinder", "shipGameID": 10, "isCurrentShip": true } }

setCommanderShipLoadout

Sets the ship loadout/configuration, including modules modifications. When no shipLoadout is set, it just resets the ship configuration.

eventData input properties
Property nameProperty typeDescription
shipTypestringShip type/name as is in the journals/cAPI (like: 'sidewinder')
shipGameIDintegerShip game ID as is in the journals/cAPI.
shipLoadoutmixedThe list of modules on the ship, including their engineering data. Please see the input JSON example for the details, the property names should be self-explanatory.
Properties marked as red are required.
The 'isHot' property for the individual modules should be set by their properties in the journal or derived from the ship status. It is not mandatory, but it is better to set it.
The blueprint modifier, experimental effect and damage type names are same as in the journals.
{
   "eventName": "setCommanderShipLoadout",
   "eventTimestamp": "2018-01-27T17:30:49Z",
   "eventData": {
       "shipType": "Federation_Corvette",
       "shipGameID": 7,
       "shipLoadout": [
           {
               "slotName": "HugeHardpoint2",
               "itemName": "Hpt_MultiCannon_Gimbal_Huge",
               "itemValue": 5102080,
               "itemHealth": 1,
               "isOn": true,
               "isHot": false,
               "itemPriority": 2,
               "itemAmmoClip": 69,
               "itemAmmoHopper": 2100,
               "engineering": {
                   "blueprintName": "Weapon_Overcharged",
                   "blueprintLevel": 5,
                   "blueprintQuality": 0,
                   "experimentalEffect": "special_incendiary_rounds",
                   "modifiers": [
                       {
                           "name": "Integrity",
                           "value": 95.420494000000005,
                           "originalValue": 80,
                           "lessIsGood": false
                       },
                       {
                           "name": "PowerDraw",
                           "value": 1.1693199999999999,
                           "originalValue": 1.22,
                           "lessIsGood": true
                       },
                       {
                           "name": "DamagePerSecond",
                           "value": 31.719926999999998,
                           "originalValue": 23.299664,
                           "lessIsGood": false
                       },
                       {
                           "name": "Damage",
                           "value": 4.9583250000000003,
                           "originalValue": 3.46,
                           "lessIsGood": false
                       },
                       {
                           "name": "DistributorDraw",
                           "value": 0.53331300000000004,
                           "originalValue": 0.37,
                           "lessIsGood": true
                       },
                       {
                           "name": "ThermalLoad",
                           "value": 1.53,
                           "originalValue": 0.51000000000000001,
                           "lessIsGood": true
                       },
                       {
                           "name": "RateOfFire",
                           "value": 3.1986530000000002,
                           "originalValue": 3.367003,
                           "lessIsGood": false
                       },
                       {
                           "name": "AmmoClipSize",
                           "value": 69,
                           "originalValue": 90,
                           "lessIsGood": false
                       },
                       {
                           "name": "DamageType",
                           "value": "$Thermic;"
                       }
                   ]
               }
           },
           {
               "slotName": "Slot02_Size7",
               "itemName": "Int_ShieldCellBank_Size7_Class5",
               "itemValue": 8272137,
               "itemHealth": 0.84999999999999998,
               "isOn": true,
               "isHot": false,
               "itemPriority": 2,
               "itemAmmoClip": 1,
               "itemAmmoHopper": 4
           },
           {
               "slotName": "Slot03_Size7",
               "itemName": "Int_CargoRack_Size7_Class1",
               "itemValue": 1001657,
               "itemHealth": 1,
               "isOn": true,
               "isHot": false,
               "itemPriority": 1
           }
       ]
   }
}
{
   "eventStatus": 200
}

setCommanderShipTransfer

Sets the ship's dock or transfer location. Set this just when the ship is not flown (the ship's dock location is not used otherwise). The ship Inara ID is returned.
Note: This event may handle multiple journal events or require multiple journal events. Please see Journal to JSON example for the details.

eventData input properties
Property nameProperty typeDescription
shipTypestringShip type/name as is in the journals/cAPI (like: 'sidewinder')
shipGameIDintegerShip game ID as is in the journals/cAPI.
starsystemNamestringThe name of the starsystem where is the ship docked or transferred to.
stationNamestringThe name of the station where is the ship docked or transferred to.
marketIDintegerThe market ID of the station. When provided, it is used as a primary location identifier. But, please always provide also the starsystemName and stationName (when known) for a case the market ID won't be found.
transferTimeintegerTime of the ship transfer in seconds, is set just when the ship is transferred.
Properties marked as red are required.
{
   "eventName": "setCommanderShipTransfer",
   "eventTimestamp": "2017-10-28T17:40:20Z",
   "eventData": {
       "shipType": "Sidewinder",
       "shipGameID": 7,
       "starsystemName": "Sol",
       "stationName": "Abraham Lincoln",
       "transferTime": 643
   }
}
{
   "eventStatus": 200,
   "eventData": {
       "shipInaraID": 285788,
       "shipInaraURL": "https:\/\/inara.cz\/cmdr-fleet\/1\/285788\/"
   }
}
Typical use is a ship transfer like the following event (journal example):
{ "timestamp":"2016-07-21T15:19:49Z", "event":"ShipyardTransfer", "ShipType":"SideWinder", "ShipID":7, "System":"Eranin", "Distance":85.639145, "TransferPrice":580, "TransferTime":2262 }

It is translated to the following, the starsystem and station name is commander's current location (not the 'System' from the journals). You can handle the credits change separately in another event.
{
   "eventName": "setCommanderShipTransfer",
   "eventTimestamp": "2016-07-21T15:19:49Z",
   "eventData": {
       "shipType": "Sidewinder",
       "shipGameID": 7,
       "starsystemName": "Sol",
       "stationName": "Abraham Lincoln",
       "transferTime": 2262
   }
}


Another case is the ship swapping in the journals: { "timestamp":"2016-07-21T14:36:06Z", "event":"ShipyardSwap", "ShipType":"sidewinder", "ShipID":10, "StoreOldShip":"Asp", "StoreShipID":2 } This event is translated to the following, where the old ship is docked and the new ship set as current. You can eventually also use 'setCommanderShip' for that. Be aware that ShipyardSwap also may sell the old ship instead of storing it. { "eventName": "setCommanderShipTransfer", "eventTimestamp": "2016-07-21T14:36:06Z", "eventData": { "shipType": "Asp", "shipGameID": 2, "starsystemName": "Sol", "stationName": "Abraham Lincoln" } }, { "eventName": "setCommanderShip", "eventTimestamp": "2016-07-21T14:36:06Z", "eventData": { "shipType": "sidewinder", "shipGameID": 10, "isCurrentShip": true } }

Commander's flight log

addCommanderTravelDock

Adds 'Docked' event to the flight log and sets commander's current location. The starsystem ID and station ID on Inara is returned in the result, when known.
Warning: There is recommended to NOT set Dock on the session start (after the 'Location' event in the journal), as it may generate a ton of 'docked' events and mess commander's flight log. There should be a proper 'dock' event already recorded from the previous session.

eventData input properties
Property nameProperty typeDescription
starsystemNamestringStar system name
stationNamestringStation name
marketIDintegerThe market ID of the station. When provided, it is used as a primary location identifier. But, please always provide also the starsystemName and stationName (when known) for a case the market ID won't be found.
shipTypestringShip type as is in the journals/cAPI (like: 'Sidewinder')
shipGameIDintegerShip game ID as is in the journals/cAPI.
Properties marked as red are required.
{
   "eventName": "addCommanderTravelDock",
   "eventTimestamp": "2017-10-28T17:30:50Z",
   "eventData": {
       "starsystemName": "Kokatese",
       "stationName": "Koontz Enterprise",
       "shipType": "Sidewinder",
       "shipGameID": 2
   }
}
{
   "eventStatus": 200,
   "eventData": {
       "starsystemInaraID": 18210,
       "starsystemInaraURL": "https:\/\/inara.cz\/galaxy-starsystem\/18210\/",
       "stationInaraID": 54894,
       "stationInaraURL": "https:\/\/inara.cz\/galaxy-station\/54894\/",
       "marketInaraURL": "https:\/\/inara.cz\/market\/18210\/54894\/"
   }
}

addCommanderTravelFSDJump

Adds 'FSDJump' event to the flight log and sets commander's current location. The starsystem ID on Inara is returned in the result, when known.

eventData input properties
Property nameProperty typeDescription
starsystemNamestringTarget star system name (where player just jumped to)
jumpDistancefloatDistance travelled in this jump in Ly (light years)
shipTypestringShip type as is in the journals/cAPI (like: 'Sidewinder')
shipGameIDintegerShip game ID as is in the journals/cAPI.
Properties marked as red are required.
{
   "eventName": "addCommanderTravelFSDJump",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "starsystemName": "Kokatese",
       "jumpDistance": 10.28,
       "shipType": "Sidewinder",
       "shipGameID": 2
   }
}
{
   "eventStatus": 200,
   "eventData": {
       "starsystemInaraID": 18210,
       "starsystemInaraURL": "https:\/\/inara.cz\/galaxy-starsystem\/18210\/"
   }
}

setCommanderTravelLocation

Sets commander's current location, no record to flight log is added. The starsystem ID and station ID on Inara is returned in the result, when known.

eventData input properties
Property nameProperty typeDescription
starsystemNamestringStar system name
stationNamestringStation name, if commander is docked in there.
marketIDintegerThe market ID of the station. When provided, it is used as a primary location identifier. But, please always provide also the starsystemName and stationName (when known) for a case the market ID won't be found.
Properties marked as red are required.
{
   "eventName": "setCommanderTravelLocation",
   "eventTimestamp": "2017-10-28T17:30:50Z",
   "eventData": {
       "starsystemName": "Inara",
       "stationName": "Citi Gateway"
   }
}
{
   "eventStatus": 200,
   "eventData": {
       "starsystemInaraID": 9333,
       "starsystemInaraURL": "https:\/\/inara.cz\/galaxy-starsystem\/9333\/",
       "stationInaraID": 13299,
       "stationInaraURL": "https:\/\/inara.cz\/galaxy-station\/13299\/",
       "marketInaraURL": "https:\/\/inara.cz\/market\/9333\/13299\/"
   }
}

Commander's mission log

addCommanderMission

Adds a mission to the commander's mission log.
Please note that any mission items (courier/hauling missions) and rewards are not handled by this event and aren't added/removed to/from commander's inventory. These needs to be handled separately with events like 'addCommanderInventoryCargoItem' as the respective properties in this event are purely for the mission details displaying.
Handling the cargo for courier (and similar) missions isn't probably necessary, as it may be complicated sometimes (see Journal to JSON example), but it is up to you.

eventData input properties
Property nameProperty typeDescription
missionNamestringMission name/identifier as is in the journals (like: 'Mission_Massacre_Legal_Military').
missionGameIDstringMission game ID from the journals.
missionExpirytimestampMission expiry date and time in ISO 8601 format.
influenceGainstringInfluence gain when mission is completed as is in the journals (['Low', 'Med', 'High']).
reputationGainstringReputation gain when mission is completed, same format as the 'influenceGain'.
starsystemNameOriginstringThe starsystem name where the mission was accepted (this information needs to be based on commander's previously known location, for example from the 'Docked' journal event).
stationNameOriginstringThe station name where the mission was accepted. It needs to be gathered the same way as 'starsystemNameOrigin'.
minorfactionNameOriginstringThe minor faction name for which is the mission accepted.
starsystemNameTargetstringDestination star system name (if any). There is possible to send the multiple destinations string format as is in the journals like 'Brohman$MISSIONUTIL_MULTIPLE_FINAL_SEPARATOR;Reorte'. In these cases the first starsystem is used and the rest is stripped.
stationNameTargetstringDestination station name (if any).
minorfactionNameTargetstringTarget minor faction name.
commodityNamestringCommodity name as is in the journals (typically courier missions).
commodityCountintegerCommodity count.
targetNamestringTarget NPC name/identifier
targetTypestringTarget type/identifier as is in the journals (like: '$MissionUtil_FactionTag_Pirate;')
killCountintegerKill count.
passengerTypestringPassenger type as is in the journals (like: 'Tourists').
passengerCountintegerPassenger count.
passengerIsVIPbooleanSet when passenger is VIP
passengerIsWantedbooleanSet when passenger is wanted.
Properties marked as red are required.
Although most of the event properties aren't required, there is recommended to set as much relevant properties as possible. Otherwise commander's mission log entries will be very brief or unusable.
{
   "eventName": "addCommanderMission",
   "eventTimestamp": "2017-10-16T14:54:54Z",
   "eventData": {
       "missionName": "Mission_Massacre_Legal_Military",
       "missionGameID": 170577201,
       "missionExpiry": "2017-10-18T10:48:33Z",
       "influenceGain": "High",
       "reputationGain": "Med",
       "starsystemNameOrigin": "Inara",
       "stationNameOrigin": "Koontz Port",
       "minorfactionNameOrigin": "Inara Crimson Vision Network",
       "starsystemNameTarget": "HIP 15415",
       "stationNameTarget": "Bisson Landing",
       "minorfactionNameTarget": "Social Warnones Resistance",
       "targetType": "$MissionUtil_FactionTag_Pirate;",
       "killCount": 16
   }
}
{
   "eventStatus": 200
}
The journal entry:

{ "timestamp":"2017-10-19T23:29:22Z", "event":"MissionAccepted", "Faction":"People's HIP 15415 League", "Name":"Mission_PassengerVIP", "Commodity":"$ConsumerTechnology_Name;", "Commodity_Localised":"Consumer Technology", "Count":2, "DestinationSystem":"Tougeir", "DestinationStation":"Janes Dock", "Expiry":"2017-07-20T01:06:32Z", "Influence":"Med", "Reputation":"High", "PassengerCount":6, "PassengerVIPs":true, "PassengerWanted":false, "PassengerType":"Tourist", "MissionID":173224636 }

...translates to input JSON the following way. Please note that there is commodityName and commodityCount, although it is a purely passenger mission. These commodities are a mission reward and are awarded upon the mission completion (see 'setCommanderMissionComplete' event for the details), but from some reason are also there. If do you want to handle the mission cargo, these cases needs to be properly handled as well.

{
   "eventName": "addCommanderMission",
   "eventTimestamp": "2017-10-19T23:29:22Z",
   "eventData": {
       "missionName": "Mission_PassengerVIP",
       "missionGameID": 173224636,
       "missionExpiry": "2017-10-20T01:06:32Z",
       "influenceGain": "Med",
       "reputationGain": "High",
       "starsystemNameOrigin": "Inara",
       "stationNameOrigin": "Koontz Port",
       "minorfactionNameOrigin": "People's HIP 15415 League",
       "starsystemNameTarget": "Tougeir",
       "stationNameTarget": "Janes Dock",
       "commodityName": "$ConsumerTechnology_Name;",
       "commodityCount": 2,
       "passengerType": "Tourist",
       "passengerCount": 6,
       "passengerIsVIP": true
   }
}

Another journal entry:

{ "timestamp":"2017-10-16T14:54:54Z", "event":"MissionAccepted", "Faction":"Inara Crimson Vision Network", "Name":"Mission_Massacre_Legal_Military", "TargetType":"$MissionUtil_FactionTag_Pirate;", "TargetType_Localised":"Pirates", "TargetFaction":"Social Warnones Resistance", "KillCount":16, "DestinationSystem":"HIP 15415", "DestinationStation":"Bisson Landing", "Expiry":"2017-07-18T10:48:33Z", "Influence":"High", "Reputation":"Med", "MissionID":170577201 }

... is pretty straightforward and translates to:

{
   "eventName": "addCommanderMission",
   "eventTimestamp": "2017-10-16T14:54:54Z",
   "eventData": {
       "missionName": "Mission_Massacre_Legal_Military",
       "missionGameID": 170577201,
       "missionExpiry": "2017-10-18T10:48:33Z",
       "influenceGain": "High",
       "reputationGain": "Med",
       "starsystemNameOrigin": "Inara",
       "stationNameOrigin": "Koontz Port",
       "minorfactionNameOrigin": "Inara Crimson Vision Network",
       "starsystemNameTarget": "HIP 15415",
       "stationNameTarget": "Bisson Landing",
       "minorfactionNameTarget": "Social Warnones Resistance",
       "targetType": "$MissionUtil_FactionTag_Pirate;",
       "killCount": 16
   }
}

setCommanderMissionAbandoned

Sets the mission as abandoned.
Please note that any mission items (courier/hauling missions) are not handled by this event and you will eventually need to remove the mission items from the commander's cargo and re-add them as stolen.

eventData input properties
Property nameProperty typeDescription
missionGameIDstringMission game ID from the journals.
Properties marked as red are required.
{
   "eventName": "setCommanderMissionAbandoned",
   "eventTimestamp": "2017-10-27T23:28:19Z",
   "eventData": {
       "missionGameID": 171735583
   }
}
{
   "eventStatus": 200
}

setCommanderMissionCompleted

Sets the mission as completed.
Please note that any mission items (courier/hauling missions) and rewards are not handled by this event and are purely for the diplay purposes. You will eventually need to remove the mission items from the commander's cargo and also properly adjust credits, awarded commodities and permits to the commander in the separate events (setCommanderInventoryCargoItem, setCommanderCredits, etc.).

eventData input properties
Property nameProperty typeDescription
missionGameIDstringMission game ID from the journals.
donationCreditsintegerCredits donated to fulfill the mission.
rewardCreditsintegerCredits received as a reward.
rewardPermitsarrayRewarded permits as array of starsystemNames, see input JSON example.
rewardCommoditiesarrayRewarded commodities as array of itemNames and itemCounts, see input JSON example.
rewardMaterialsarrayRewarded materials/data as array of itemNames and itemCounts, see input JSON example.
Properties marked as red are required.
{
   "eventName": "setCommanderMissionCompleted",
   "eventTimestamp": "2017-10-27T23:28:19Z",
   "eventData": {
       "missionGameID": 171735583,
       "rewardCredits": 12000,
       "rewardPermits": [
           {
               "starsystemName": "Alioth"
           },
           {
               "starsystemName": "Polaris"
           }
       ],
       "rewardCommodities": [
           {
               "itemName": "NeofabricInsulation",
               "itemCount": 4
           },
           {
               "itemName": "Bromellite",
               "itemCount": 2
           }
       ],
       "rewardMaterials": [
           {
               "itemName": "Arsenic",
               "itemCount": 2
           }
       ]
   }
}
{
   "eventStatus": 200
}

setCommanderMissionFailed

Sets the mission as failed.
Please note that any mission items (courier/hauling missions) are not handled by this event and you will eventually need to remove the mission items from the commander's cargo and re-add them as stolen.

eventData input properties
Property nameProperty typeDescription
missionGameIDstringMission game ID from the journals.
Properties marked as red are required.
{
   "eventName": "setCommanderMissionFailed",
   "eventTimestamp": "2017-10-27T23:28:19Z",
   "eventData": {
       "missionGameID": 171735583
   }
}
{
   "eventStatus": 200
}

Commander's combat log

addCommanderCombatDeath

Adds a 'death/died' record to commander's combat log.
Note: This event won't work without a 'commanderName' in the header set.

eventData input properties
Property nameProperty typeDescription
starsystemNamestringName of the starsystem where the incident happened.
opponentNamestringName of the killer (commander or NPC).
wingOpponentNamesarrayList of killer names, when the commander was killed by wing (see JSON input example for details).
isPlayerbooleanSet when you know the killer was player. If you don't know for sure, set nothing and Inara will try to decide who the killer was. As journals doesn't contain this flag in Died events, it may be easier to leave it simply to Inara.
Properties marked as red are required.
Although 'opponentName' and 'wingOpponentNames' are not required, there should be one of them set, depending if the commander was killed by single player/NPC or by wing. If no names are provided (the ship was destroyed by collision), the record is accepted but not added (it is not part of the combat).
Killed by NPC:
{
   "eventName": "addCommanderCombatDeath",
   "eventTimestamp": "2017-10-28T17:31:20Z",
   "eventData": {
       "starsystemName": "Lave",
       "opponentName": "$ShipName_MilitaryFighter_Federation;"
   }
}

Killed by single player:
{
   "eventName": "addCommanderCombatDeath",
   "eventTimestamp": "2017-10-28T17:31:50Z",
   "eventData": {
       "starsystemName": "Lave",
       "opponentName": "Cmdr Mydlivoj Tydlitat"
   }
}

Killed by wing of players:
{
   "eventName": "addCommanderCombatDeath",
   "eventTimestamp": "2017-10-28T17:32:45Z",
   "eventData": {
       "starsystemName": "Lave",
       "wingOpponentNames": [
           "Cmdr Narkoleptik",
           "Cmdr Almara Potrhla",
           "Cmdr Jason Vyvoneny"
       ]
   }
}
{
   "eventStatus": 200
}

addCommanderCombatInterdicted

Adds an 'interdicted' record to commander's combat log (when he was interdicted and didn't managed to escape).
Note: This event won't work without a 'commanderName' in the header set.

eventData input properties
Property nameProperty typeDescription
starsystemNamestringName of the starsystem where the interdiction happened.
opponentNamestringName of the interdictor (commander or NPC). If there is no 'Indertictor' property in the journal event, use just 'Power' or 'Faction' property instead.
isPlayerbooleanSet when you know the interdictor was player. The journal contains this flag in interdiction events, so you can use it.
isSubmitbooleanSet when commander submitted to the interdiction.
Properties marked as red are required.
{
   "eventName": "addCommanderCombatInterdicted",
   "eventTimestamp": "2017-10-28T17:37:10Z",
   "eventData": {
       "starsystemName": "Lave",
       "opponentName": "White Rabbit Revenger",
       "isPlayer": true,
       "isSubmit": true
   }
}
{
   "eventStatus": 200
}

addCommanderCombatInterdiction

Adds an 'interdiction' record to commander's combat log (when he tried to interdict someone).
Note: This event won't work without a 'commanderName' in the header set.

eventData input properties
Property nameProperty typeDescription
starsystemNamestringName of the starsystem where the interdiction happened.
opponentNamestringName of the target (commander or NPC). If there is no 'Inderticted' property in the journal event, use just 'Power' or 'Faction' property instead.
isPlayerbooleanSet when you know the target was player. The journal contains this flag in interdiction events, so you can use it.
isSuccessbooleanSet when the interdiction was successful.
Properties marked as red are required.
{
   "eventName": "addCommanderCombatInterdiction",
   "eventTimestamp": "2017-10-28T17:35:20Z",
   "eventData": {
       "starsystemName": "Lave",
       "opponentName": "Mad White Rabbit",
       "isPlayer": true,
       "isSuccess": true
   }
}
{
   "eventStatus": 200
}

addCommanderCombatInterdictionEscape

Adds an 'interdiction escaped' record to commander's combat log (when he was interdicted but managed to escape).
Note: This event won't work without a 'commanderName' in the header set.

eventData input properties
Property nameProperty typeDescription
starsystemNamestringName of the starsystem where the interdiction happened.
opponentNamestringName of the interdictor (commander or NPC).
isPlayerbooleanSet when you know the interdictor was player. The journal contains this flag in interdiction events, so you can use it.
Properties marked as red are required.
{
   "eventName": "addCommanderCombatInterdictionEscape",
   "eventTimestamp": "2017-10-28T17:36:40Z",
   "eventData": {
       "starsystemName": "Lave",
       "opponentName": "White Rabbit Revenger",
       "isPlayer": true
   }
}
{
   "eventStatus": 200
}

addCommanderCombatKill

Adds a 'kill' record to commander's combat log (when he killed someone). Currently, it records just player/PvP kills, so ensure there are just PvP kills sent ('PVPKill' event in the journals).
Note: This event won't work without a 'commanderName' in the header set.

eventData input properties
Property nameProperty typeDescription
starsystemNamestringName of the starsystem where the kill happened.
opponentNamestringName of the victim (commander).
Properties marked as red are required.
{
   "eventName": "addCommanderCombatKill",
   "eventTimestamp": "2017-10-28T17:38:20Z",
   "eventData": {
       "starsystemName": "Lave",
       "opponentName": "Cmdr White Rabbit Revenger"
   }
}
{
   "eventStatus": 200
}

Community goals

getCommunityGoalsRecent

Returns details of ongoing or recently finished community goals as are recorded on Inara.

This event can be used with the generic API key.
eventData input properties
No properties to set (but eventData is still required).

{
   "eventName": "getCommunityGoalsRecent",
   "eventTimestamp": "2017-11-06T23:32:17+01:00",
   "eventData": []
}
{
   "eventStatus": 200,
   "eventData": [
       {
           "communitygoalName": "Operation Andronicus",
           "starsystemName": "Pleiades Sector IR-W d1-55",
           "stationName": "The Oracle",
           "goalExpiry": "2017-11-09T16:00:00+01:00",
           "tierReached": 4,
           "tierMax": 0,
           "contributorsNum": 408,
           "contributionsTotal": 2838230000,
           "isCompleted": false,
           "lastUpdate": "2017-11-08T14:10:05+01:00",
           "goalObjectiveText": "Hand in Pilots Federation Combat Bonds",
           "goalRewardText": "",
           "goalDescriptionText": "With Thargoid attacks becoming a regular occurrence in the Pleiades Nebula, Aegis has leveraged its considerable reserves to fund a military operation in the Pleiades Sector IR-W d1-55. The initiative, dubbed \u2018Operation Andronicus\u2019, has been expressly conceived to counter Thargoid aggression in the region.\r\n\r\nAdmiral Aden Tanner, Aegis\u2019s chief military liaison, elaborated on the nature of the initiative:\r\nPersonal-scale craft are particularly effective against Thargoid vessels, not least because of the comparative vulnerability of capital-class ships. I therefore believe the most effective way to address the Thargoid threat \u2013 in the short term at least \u2013 is a militia of seasoned combat pilots. Aegis has agreed to finance this initiative, which will aim to deliver a strategic blow to the Thargoids in the Pleiades Sector IR-W d1-55.\r\n\r\nAegis Research has confirmed that it will reward pilots who hand in Pilots Federation Combat Bonds at The Oracle in the Pleiades Sector IR-W d1-55.",
           "inaraURL": "https:\/\/inara.cz\/galaxy-communitygoals\/"
       },
       {
           "communitygoalName": "Rescue Operation in the Pleiades",
           "starsystemName": "Pleiades Sector IR-W d1-55",
           "stationName": "The Oracle",
           "goalExpiry": "2017-11-09T16:00:00+01:00",
           "tierReached": 6,
           "tierMax": 0,
           "contributorsNum": 2038,
           "contributionsTotal": 40001,
           "isCompleted": true,
           "lastUpdate": "2017-11-08T05:04:11+01:00",
           "goalObjectiveText": "Deliver Occupied Escape Pods, Damaged Escape Pods, Black Boxes and Personal Effects",
           "goalRewardText": "",
           "goalDescriptionText": "Cooper Research Associates have launched a rescue operation to recover personal effects, data and people from Thargoid attack sites in the Pleiades Nebula.\r\n\r\nThe organisation has promised to reward pilots who deliver Occupied Escape Pods, Damaged Escape Pods, Black Boxes and Personal Effects to the search-and-rescue contact at The Oracle in the Pleiades Sector IR-W d1-55 system.\r\n\r\nA spokesperson for Cooper Research Associates released a brief statement:\r\nEyewitnesses have reported that Thargoid vessels are taking occupied escape pods from ships they have attacked. It is therefore essential that we recover any and all individuals from these attack sites before they can be similarly abducted.",
           "inaraURL": "https:\/\/inara.cz\/galaxy-communitygoals\/"
       }
   ]
}

setCommanderCommunityGoalProgress

Sets community goal progress for individual commander.
Note that CommunityGoal event in the journals may contain multiple goals at once and those needs to be set separately. See also 'setCommunityGoal' event which is recommended to set before this event and Journal to JSON example for details.

eventData input properties
Property nameProperty typeDescription
communitygoalGameIDintegerCommunity goal game ID.
contributionintegerCommander's contribution to the goal.
percentileBandintegerCommander's percentile band in a range [0-100].
percentileBandRewardintegerCommander's reward for this percentile band.
isTopRankbooleanSet when commander is in top rank (Top XX CMDRs).
Properties marked as red are required.
{
   "eventName": "setCommanderCommunityGoalProgress",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "communitygoalGameID": 428,
       "contribution": 123500,
       "percentileBand": 75,
       "percentileBandReward": 600000,
       "isTopRank": false
   }
}
{
   "eventStatus": 200
}
Journal record (taken from the journal manual):

{ "timestamp":"2017-08-14T13:20:28Z", "event":"CommunityGoal", "CurrentGoals":[ { "CGID":726, "Title":"Alliance Research Initiative – Trade", "SystemName":"Kaushpoos", "MarketName":"Neville Horizons", "Expiry":"2017-08-17T14:58:14Z", "IsComplete":false, "CurrentTotal":10062, "PlayerContribution":562, "NumContributors":101, "TopRankSize":10, "PlayerInTopRank":false, "TierReached":"Tier 1", "PlayerPercentileBand":50, "Bonus":200000 } ] }

Translates to following input data (please note that 'tierMax' is not set as it is missing in the journals at this moment):

{
   "eventName": "setCommunityGoal",
   "eventTimestamp": "2017-08-14T13:20:28Z",
   "eventData": {
       "communitygoalGameID": 726,
       "communitygoalName": "Alliance Research Initiative – Trade",
       "starsystemName": "Kaushpoos",
       "stationName": "Neville Horizons",
       "tierReached": 1,
       "topRankSize": 10,
       "goalExpiry": "2017-08-17T14:58:14Z",
       "isCompleted": false,
       "contributorsNum": 101,
       "contributionsTotal": 10062
   }
},
{
   "eventName": "setCommanderCommunityGoalProgress",
   "eventTimestamp": "2017-08-14T13:20:28Z",
   "eventData": {
       "communitygoalGameID": 726,
       "contribution": 562,
       "percentileBand": 50,
       "percentileBandReward": 200000,
       "isTopRank": false
   }
}

setCommunityGoal

Sets community goal properties. If no goal is found, it is automatically added.
Please note that CommunityGoal event in the journals may contain multiple goals at once and those needs to be set separately. Also, the journal entry contains the player's contributions and these must be added separately in the 'setCommanderCommunityGoalProgress' event, see Journal to JSON example for details.

This event makes no action when the development mode is set.
eventData input properties
Property nameProperty typeDescription
communitygoalGameIDintegerCommunity goal game ID.
communitygoalNamestringName of the community goal (non-localized, in english).
starsystemNamestringName of the starsystem where the goal is happening.
stationNamestringStation name where the goal is happening.
goalExpirytimestampGpal expiration/end date in ISO 8601 format.
tierReachedintegerTier reached, beware that journals contain this value as 'Tier X', so the word 'Tier' needs to be stripped and 'X' converted to integer
tierMaxintegerMax. tier of the goal.
topRankSizeintegerTop rank size of the goal (Top XX CMDRs).
isCompletedbooleanSet when the goal is already completed.
contributorsNumintegerTotal number of contributors (count of commanders participating).
contributionsTotalintegerTotal number of all contributions.
completionBonusstringBonus on goal completion.
Properties marked as red are required.
{
   "eventName": "setCommunityGoal",
   "eventTimestamp": "2017-10-28T17:30:49Z",
   "eventData": {
       "communitygoalGameID": 428,
       "communitygoalName": "Conflict in Colonia - Colonia Council",
       "starsystemName": "Colonia",
       "stationName": "Jaques Station",
       "goalExpiry": "2017-10-29T18:00:00Z",
       "tierReached": 2,
       "tierMax": 8,
       "topRankSize": 10,
       "isCompleted": false,
       "contributorsNum": 1458,
       "contributionsTotal": 1568756
   }
}
{
   "eventStatus": 200
}
Journal record (taken from the journal manual):

{ "timestamp":"2017-08-14T13:20:28Z", "event":"CommunityGoal", "CurrentGoals":[ { "CGID":726, "Title":"Alliance Research Initiative – Trade", "SystemName":"Kaushpoos", "MarketName":"Neville Horizons", "Expiry":"2017-08-17T14:58:14Z", "IsComplete":false, "CurrentTotal":10062, "PlayerContribution":562, "NumContributors":101, "TopRankSize":10, "PlayerInTopRank":false, "TierReached":"Tier 1", "PlayerPercentileBand":50, "Bonus":200000 } ] }

Translates to following input data (please note that 'tierMax' is not set as it is missing in the journals at this moment):

{
   "eventName": "setCommunityGoal",
   "eventTimestamp": "2017-08-14T13:20:28Z",
   "eventData": {
       "communitygoalGameID": 726,
       "communitygoalName": "Alliance Research Initiative – Trade",
       "starsystemName": "Kaushpoos",
       "stationName": "Neville Horizons",
       "tierReached": 1,
       "topRankSize": 10,
       "goalExpiry": "2017-08-17T14:58:14Z",
       "isCompleted": false,
       "contributorsNum": 101,
       "contributionsTotal": 10062
   }
},
{
   "eventName": "setCommanderCommunityGoalProgress",
   "eventTimestamp": "2017-08-14T13:20:28Z",
   "eventData": {
       "communitygoalGameID": 726,
       "contribution": 562,
       "percentileBand": 50,
       "percentileBandReward": 200000,
       "isTopRank": false
   }
}