<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.factorio.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vinzenz</id>
	<title>Official Factorio Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.factorio.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vinzenz"/>
	<link rel="alternate" type="text/html" href="https://wiki.factorio.com/Special:Contributions/Vinzenz"/>
	<updated>2026-04-22T21:12:05Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Web_authentication_API&amp;diff=199416</id>
		<title>Web authentication API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Web_authentication_API&amp;diff=199416"/>
		<updated>2024-08-26T11:10:42Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Internal|Internal API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Factorio&#039;s Web Authentication API endpoint gives you a token in exchange for your username and password, which is used by several other Factorio web API endpoints. The authentication endpoint is located at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://auth.factorio.com/api-login&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Authentication requires sending an HTTP POST request (Content-Type: &amp;lt;code&amp;gt;application/x-www-form-urlencoded&amp;lt;/code&amp;gt;) with these parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| username&lt;br /&gt;
| Required.&lt;br /&gt;
| Account username or e-mail.&lt;br /&gt;
|-&lt;br /&gt;
| password&lt;br /&gt;
| Required.&lt;br /&gt;
| Account password.&lt;br /&gt;
|- &lt;br /&gt;
| api_version&lt;br /&gt;
| (Technically) not required. API responses will be different than described on this page when not set to 4.&lt;br /&gt;
| Currently 4.&lt;br /&gt;
|-&lt;br /&gt;
| require_game_ownership&lt;br /&gt;
| Not required.&lt;br /&gt;
| If set to &#039;true&#039;, will fail authentication if the user account hasn&#039;t actually purchased Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| email_authentication_code&lt;br /&gt;
| Not required.&lt;br /&gt;
| If a previous login failed with &amp;lt;code&amp;gt;email-authentication-required&amp;lt;/code&amp;gt;, email authentication can be completed by including the code sent to the user via mail.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This endpoint always returns JSON encoded data. If authentication was successful, it will return an HTTP status code of 200 with a JSON object:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| token&lt;br /&gt;
| Auth token is a hexadecimal encoded byte string&lt;br /&gt;
|-&lt;br /&gt;
| username&lt;br /&gt;
| The username of the logged in user. &lt;br /&gt;
&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
On non-200 status codes, the response can be JSON encoded and provide more details about the problem:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| error&lt;br /&gt;
| Error codes like &amp;lt;code&amp;gt;login-failed&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;email-authentication-required&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| message&lt;br /&gt;
| A more detailed error message that can be shown to the user &lt;br /&gt;
&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
Clients causing a lot of errors like &amp;lt;code&amp;gt;login-failed&amp;lt;/code&amp;gt; will be rate limited.&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Main_Page/Latest_versions&amp;diff=191890</id>
		<title>Main Page/Latest versions</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Main_Page/Latest_versions&amp;diff=191890"/>
		<updated>2023-07-14T11:56:10Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: 1.1.87 stable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* {{Translation|Latest stable version}}: [[Version history/1.1.0#1.1.87|1.1.87]]&lt;br /&gt;
* {{Translation|Latest experimental version}}: [https://forums.factorio.com/107634 1.1.87]&lt;br /&gt;
* {{Translation|The wiki is based on version}} [[Version history/1.1.0|1.1]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* [[Roadmap{{If language suffix}}|{{Translation|Planned releases}}]]&lt;br /&gt;
** [[Upcoming_features{{If language suffix}}|{{Translation|Planned features}}]]&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{C|Main}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=191344</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=191344"/>
		<updated>2023-05-05T10:52:54Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used to change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod. Min length 1, max length 250&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod. Max length 500&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| tags || enum, optional, multiple possible || Mod tags, see [[#Tags]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || string, optional || URL of mod homepage (URL must use &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; scheme), max length 256&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || string, optional || URL of mod source code repository (URL must use &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; scheme), max length 256&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;no-category&amp;lt;/code&amp;gt;|| No category &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;|| Content || Mods introducing new content into the game. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;overhaul&amp;lt;/code&amp;gt;|| Overhaul || Large total conversion mods. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;tweaks&amp;lt;/code&amp;gt;|| Tweaks || Small changes concerning balance, gameplay, or graphics. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utilities&amp;lt;/code&amp;gt;|| Utilities || Providing the player with new tools or adjusting the game interface, without fundamentally changing gameplay. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Scenarios, maps, and puzzles. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;localizations&amp;lt;/code&amp;gt;|| Localizations || Translations for other mods. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;internal&amp;lt;/code&amp;gt;|| Internal || Lua libraries for use by other mods and submods that are parts of a larger mod. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Transportation of the player, be it vehicles or teleporters. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Augmented or new ways of transporting materials - belts, inserters, pipes! &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || Trains are great, but what if they could do even more? &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;combat&amp;lt;/code&amp;gt;|| Combat || New ways to deal with enemies, be it attack or defense. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || Changes to enemies or entirely new enemies to deal with. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || Map generation and terrain modification. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || New Ores and resources as well as machines. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fluids&amp;lt;/code&amp;gt;|| Fluids || Things related to oil and other fluids. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || Entities which interact with the circuit network. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacturing&amp;lt;/code&amp;gt;|| Manufacturing || Furnaces, assembling machines, production chains. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power&amp;lt;/code&amp;gt;|| Power || Changes to power production and distribution. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || More than just chests. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || Change blueprint behavior. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || Play it your way. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;, &amp;quot;tags&amp;quot;: [&amp;quot;power&amp;quot;, &amp;quot;storage&amp;quot;], &amp;quot;category&amp;quot;: &amp;quot;tweaks&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=190597</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=190597"/>
		<updated>2022-12-20T09:25:48Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used to change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod. Min length 1, max length 250&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod. Max length 500&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| tags || enum, optional, multiple possible || Mod tags, see [[#Tags]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || string, optional || URL of mod homepage (URL must use &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; scheme), max length 256&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || string, optional || URL of mod source code repository (URL must use &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; scheme), max length 256&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;|| Content || Mods introducing new content into the game. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;overhaul&amp;lt;/code&amp;gt;|| Overhaul || Large total conversion mods. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;tweaks&amp;lt;/code&amp;gt;|| Tweaks || Small changes concerning balance, gameplay, or graphics. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utilities&amp;lt;/code&amp;gt;|| Utilities || Providing the player with new tools or adjusting the game interface, without fundamentally changing gameplay. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Scenarios, maps, and puzzles. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;localizations&amp;lt;/code&amp;gt;|| Localizations || Translations for other mods. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;internal&amp;lt;/code&amp;gt;|| Internal || Lua libraries for use by other mods and submods that are parts of a larger mod. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Transportation of the player, be it vehicles or teleporters. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Augmented or new ways of transporting materials - belts, inserters, pipes! &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || Trains are great, but what if they could do even more? &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;combat&amp;lt;/code&amp;gt;|| Combat || New ways to deal with enemies, be it attack or defense. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || Changes to enemies or entirely new enemies to deal with. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || Map generation and terrain modification. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || New Ores and resources as well as machines. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fluids&amp;lt;/code&amp;gt;|| Fluids || Things related to oil and other fluids. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || Entities which interact with the circuit network. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacturing&amp;lt;/code&amp;gt;|| Manufacturing || Furnaces, assembling machines, production chains. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power&amp;lt;/code&amp;gt;|| Power || Changes to power production and distribution. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || More than just chests. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || Change blueprint behavior. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || Play it your way. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;, &amp;quot;tags&amp;quot;: [&amp;quot;power&amp;quot;, &amp;quot;storage&amp;quot;], &amp;quot;category&amp;quot;: &amp;quot;tweaks&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=190596</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=190596"/>
		<updated>2022-12-20T08:29:27Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: fix error in python example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used to change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod. Min length 1, max length 250&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod. Max length 500&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| tags || enum, optional, multiple possible || Mod tags, see [[#Tags]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || string, optional || URL of mod homepage (URL must use &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; scheme). Max length 256&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || string, optional || URL of mod source code repository (URL must use &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; scheme)&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;|| Content || Mods introducing new content into the game. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;overhaul&amp;lt;/code&amp;gt;|| Overhaul || Large total conversion mods. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;tweaks&amp;lt;/code&amp;gt;|| Tweaks || Small changes concerning balance, gameplay, or graphics. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utilities&amp;lt;/code&amp;gt;|| Utilities || Providing the player with new tools or adjusting the game interface, without fundamentally changing gameplay. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Scenarios, maps, and puzzles. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;localizations&amp;lt;/code&amp;gt;|| Localizations || Translations for other mods. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;internal&amp;lt;/code&amp;gt;|| Internal || Lua libraries for use by other mods and submods that are parts of a larger mod. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Transportation of the player, be it vehicles or teleporters. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Augmented or new ways of transporting materials - belts, inserters, pipes! &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || Trains are great, but what if they could do even more? &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;combat&amp;lt;/code&amp;gt;|| Combat || New ways to deal with enemies, be it attack or defense. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || Changes to enemies or entirely new enemies to deal with. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || Map generation and terrain modification. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || New Ores and resources as well as machines. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fluids&amp;lt;/code&amp;gt;|| Fluids || Things related to oil and other fluids. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || Entities which interact with the circuit network. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacturing&amp;lt;/code&amp;gt;|| Manufacturing || Furnaces, assembling machines, production chains. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power&amp;lt;/code&amp;gt;|| Power || Changes to power production and distribution. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || More than just chests. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || Change blueprint behavior. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || Play it your way. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;, &amp;quot;tags&amp;quot;: [&amp;quot;power&amp;quot;, &amp;quot;storage&amp;quot;], &amp;quot;category&amp;quot;: &amp;quot;tweaks&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=190592</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=190592"/>
		<updated>2022-12-19T10:11:35Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: Document new categories and tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used to change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod. Min length 1, max length 250&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod. Max length 500&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| tags || enum, optional, multiple possible || Mod tags, see [[#Tags]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || string, optional || URL of mod homepage (URL must use &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; scheme). Max length 256&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || string, optional || URL of mod source code repository (URL must use &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; scheme)&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;|| Content || Mods introducing new content into the game. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;overhaul&amp;lt;/code&amp;gt;|| Overhaul || Large total conversion mods. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;tweaks&amp;lt;/code&amp;gt;|| Tweaks || Small changes concerning balance, gameplay, or graphics. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utilities&amp;lt;/code&amp;gt;|| Utilities || Providing the player with new tools or adjusting the game interface, without fundamentally changing gameplay. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Scenarios, maps, and puzzles. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;localizations&amp;lt;/code&amp;gt;|| Localizations || Translations for other mods. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;internal&amp;lt;/code&amp;gt;|| Internal || Lua libraries for use by other mods and submods that are parts of a larger mod. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Transportation of the player, be it vehicles or teleporters. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Augmented or new ways of transporting materials - belts, inserters, pipes! &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || Trains are great, but what if they could do even more? &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;combat&amp;lt;/code&amp;gt;|| Combat || New ways to deal with enemies, be it attack or defense. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || Changes to enemies or entirely new enemies to deal with. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || Map generation and terrain modification. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || New Ores and resources as well as machines. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fluids&amp;lt;/code&amp;gt;|| Fluids || Things related to oil and other fluids. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || Entities which interact with the circuit network. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacturing&amp;lt;/code&amp;gt;|| Manufacturing || Furnaces, assembling machines, production chains. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power&amp;lt;/code&amp;gt;|| Power || Changes to power production and distribution. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || More than just chests. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || Change blueprint behavior. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || Play it your way. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;, tags=[&amp;quot;power&amp;quot;, &amp;quot;storage&amp;quot;], category=&amp;quot;tweaks&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Multiplayer&amp;diff=190464</id>
		<title>Multiplayer</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Multiplayer&amp;diff=190464"/>
		<updated>2022-11-28T14:36:36Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: Document SRV records&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
[[File:players_colored_preview.png|190px|right]]In addition to being a single-player game, Factorio also supports multiplayer, allowing many [[player]]s to cooperate and assist each other, or work against each other in pvp. This page documents how to set up a multiplayer game, how to join one, and the Multiplayer Admin features for managing other users and the server. By default, multiplayer games run the CO-OP [[Game modes and options|freeplay scenario]] where all players work together to launch a rocket with a satellite into space. Other scenarios, including PvP maps, are available for download from the [https://forums.factorio.com/viewforum.php?f=36&amp;amp;sid=93d1fbe9336d31d6bac60847b6c97985 Maps and Scenarios forum].&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Multiplayer Game ==&lt;br /&gt;
&lt;br /&gt;
[[File:multiplayer_game_night.png|thumb|250px|A multiplayer game.]]Multiplayer games can be joined, hosted while playing, or hosted by a dedicated server.  Multiplayer games can be advertised to other players on the same LAN or worldwide.&lt;br /&gt;
&lt;br /&gt;
Use the &#039;&#039;Multiplayer&#039;&#039; button in the &#039;&#039;Play&#039;&#039; menu to start playing a multiplayer game, choose &#039;&#039;New&#039;&#039; or &#039;&#039;Load&#039;&#039; or &#039;&#039;Scenarios&#039;&#039; to host and play, or &#039;&#039;Browse&#039;&#039; or &#039;&#039;Play on LAN&#039;&#039; to connect to an already-running game. The host can also choose not to advertise the game at all, in which case you&#039;ll need the server&#039;s (public or otherwise reachable) IP address; you can then &#039;&#039;Connect&#039;&#039; directly to that to join the game.&lt;br /&gt;
&lt;br /&gt;
Notes and tips:&lt;br /&gt;
&lt;br /&gt;
* All game instances need the installation of &#039;&#039;exactly the same&#039;&#039; game-versions and mods.&lt;br /&gt;
* Factorio servers use port &#039;&#039;&#039;34197&#039;&#039;&#039;. The port can be changed in the [[Application directory|config]] file.&lt;br /&gt;
* Factorio uses &#039;&#039;&#039;UDP only&#039;&#039;&#039;. The game builds its own &amp;quot;reliable delivery&amp;quot; layer built on UDP to deal with packet loss and reordering issues.&lt;br /&gt;
** Make sure you configure your router&#039;s port forwarding correctly for port &#039;&#039;&#039;34197&#039;&#039;&#039;.&lt;br /&gt;
** Make sure your router does not [https://doc.pfsense.org/index.php/Static_Port randomize the source port] on packets outbound from &#039;&#039;&#039;34197&#039;&#039;&#039;.  Some routers do this and require [https://forum.pfsense.org/index.php?PHPSESSID=3k4h9n5o2tksgqv910fknf7qt7&amp;amp;topic=142188.msg798594#msg798594 additional configuration] to prevent it.&lt;br /&gt;
** Make sure there is no firewall or anti-virus blocking the UDP-packets.&lt;br /&gt;
* The hard limit for the number of players is [https://forums.factorio.com/viewtopic.php?f=53&amp;amp;t=6481&amp;amp;p=50661#p50586 65,535]. However, practical limit for this is much lower, popular streamers have managed to get well over a hundred players.&lt;br /&gt;
&lt;br /&gt;
=== Dedicated/Headless server ===&lt;br /&gt;
&lt;br /&gt;
As of Factorio version 0.12.0 onwards, a dedicated (or headless) server can be started using the --start-server command line option. You can run factorio --help to get a list of all command-line arguments that Factorio accepts.&lt;br /&gt;
&lt;br /&gt;
In the headless mode:&lt;br /&gt;
* Graphics are not initialized (faster start up, less memory usage, works on completely headless servers)&lt;br /&gt;
* Game starts immediately and loads a save given as a parameter to the command&lt;br /&gt;
* The server has no character in game&lt;br /&gt;
* Game is paused while there are no players connected (though this can be overridden using the no-auto-pause option in the server-settings.json)&lt;br /&gt;
* Saves the game on exit (and autosaves normally)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;0.13 onwards expects --start-server to be followed by a path to a save file.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You will need to create your save file before you start the server, as the dedicated server REQUIRES a save file to be provided. This can easily be done using the --create command-line argument. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/x64/factorio --create ./saves/my-save.zip       # This creates a new save, as if by clicking the New Game button in the GUI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/x64/factorio --start-server ./saves/my-save.zip # This starts a server that will host the file created on the previous line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are several JSON configuration files that factorio can make use of to change the server and map settings:&lt;br /&gt;
* &#039;&#039;&#039;map-gen-settings&#039;&#039;&#039; to set parameters used by the map generator such as width and height, ore patch frequency and size, etc. (Added in 0.13)&lt;br /&gt;
* &#039;&#039;&#039;map-settings&#039;&#039;&#039; to control pollution spread, biter expansion and evolution, and more (Added in 0.15)&lt;br /&gt;
* &#039;&#039;&#039;server-settings&#039;&#039;&#039; which consolidated several command-line options into a single file (Added in 0.14.12)&lt;br /&gt;
Example files for each of these parameters are included in the data subdirectory.&lt;br /&gt;
&lt;br /&gt;
The --map-gen-settings and --map-settings options must be used with the --create option when you create a new map.  For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;./bin/x64/factorio --create saves/my-save.zip --map-gen-settings my-map-gen-settings.json --map-settings my-map-settings.json&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting the factorio server requires you to specify the location of the server-settings.json file. By default this is in the factorio data folder. For example to start factorio using the most recent saved map, you would run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./bin/x64/factorio --start-server-load-latest --server-settings ./data/server-settings.json&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On windows, it may be useful to start the server with a .bat file. The bat file should have the following content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;start /wait .\bin\x64\factorio.exe --start-server-load-latest --server-settings .\data\server-settings.json&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[Command_line_parameters]] for more command line parameters.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Setting up a Linux Factorio server ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Factorio now requires &amp;lt;tt&amp;gt;glibc&amp;lt;/tt&amp;gt; version 2.18, but CentOS/RHEL 7 only ship with version 2.17 so this guide will no longer work without [https://forums.factorio.com/viewtopic.php?t=54654#p324493 manually compiling &amp;lt;tt&amp;gt;glibc&amp;lt;/tt&amp;gt; 2.18].&lt;br /&gt;
&lt;br /&gt;
This step-by-step guide has been verified on fresh CentOS 7 and RHEL 7 installs but should be applicable with little to no changes on most distributions.&lt;br /&gt;
&lt;br /&gt;
The guide assumes you will install the headless server under &#039;&#039;&#039;/opt/factorio&#039;&#039;&#039;, adjust paths according to your own setup. We will also suggest that you run the Factorio server as a separate user to harden security of your setup.&lt;br /&gt;
&lt;br /&gt;
Note that there are two distinct packages for Linux that can be used to run a headless server. First is the usual Linux download, that contains the full game. The other is the special  [https://www.factorio.com/download headless package]. The headless package does not contain any files irrelevant for a pure server, such as graphics and sounds. It is also not linked against libraries that may not be present on a server machine, such as Xlib, libGL or libasound. This option should be selected if running in a 3rd party hosted server.&lt;br /&gt;
&lt;br /&gt;
This guide does not handle firewall/port forwarding since this can be done in various ways on Linux (make sure to read up how this is done as a Linux admin on your particular distribution)&lt;br /&gt;
&lt;br /&gt;
==== Basic installation ====&lt;br /&gt;
&lt;br /&gt;
* Download the selected package -- either full game or the headless package -- and upload the Linux tar.gz or tar.xz package to your server /tmp&lt;br /&gt;
* Extract the package in /tmp to /opt/factorio&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$cd /opt/&lt;br /&gt;
&lt;br /&gt;
$sudo tar -xzf /tmp/factorio.tar.gz # Use the correct file name. It includes the factorio version number&lt;br /&gt;
$sudo tar -xJf /tmp/factorio.tar.xz # if you downloaded a .tar.xz file (ver 0.15.x)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add a new user to your system and assign ownership of the factorio dir to it (please, do not run as the root user, sudo may be needed)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$useradd factorio&lt;br /&gt;
$chown -R factorio:factorio /opt/factorio&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Try the binary&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$su factorio&lt;br /&gt;
$/opt/factorio/bin/x64/factorio --start-server savename&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As long as it fails saying it cannot find/open the savename.zip you are set! Just upload a save from your own computer and put it in the /opt/factorio/saves directory, or use the --create ./saves/newgame.zip argument.&lt;br /&gt;
&lt;br /&gt;
=== How to list a server-hosted game on the matching server ===&lt;br /&gt;
&lt;br /&gt;
In order to publish the game to the matching server, Factorio needs to be given some more information than just the save file location. These information are provided in a &#039;&#039;server settings file&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To create a server settings file, look at the example file located in &#039;&#039;&#039;data/server-settings.example.json&#039;&#039;&#039; in the Factorio [[Application directory]]. The recommended way is to make a copy of this example file and edit the copy.&lt;br /&gt;
&lt;br /&gt;
The following values can be changed:&lt;br /&gt;
; Name: This will be the name under which the server will be listed in the server browser&lt;br /&gt;
; Description: A description of your server. May contain up to 5000 characters. [https://factorio.com/blog/post/fff-304 MP server description]&lt;br /&gt;
; Tags: A list of game tags&lt;br /&gt;
; Max Players: Allows you to limit the number of players that can be connected to the server at the same time. If you want no limit, just set max_players to 0.&lt;br /&gt;
* Visibility for server browser: May be either public, LAN or hidden.&lt;br /&gt;
** Public: The server will appear in the public server list. This requires the login credentials below to be filled in.&lt;br /&gt;
** LAN: The server will not appear in the public server list, but will be available through the Play On LAN button&lt;br /&gt;
** Hidden: Clients will have to connect using the server&#039;s IP address&lt;br /&gt;
* User credentials using a username and password or authentication token (found on the factorio website or in the player-data.json): These are necessary if you wish to make the server public. Otherwise, they can be left empty.&lt;br /&gt;
** For security reasons it is recommended to use authentication token as this document is stored as plain text. Though it should be noted that an authentication token is a sensitive piece of information as well, and you are well-advised to keep it secret.&lt;br /&gt;
* Server Password&lt;br /&gt;
** Field name is game_password&lt;br /&gt;
* Whether to verify user identity&lt;br /&gt;
(There are additional values in v0.14 of factorio.)&lt;br /&gt;
&lt;br /&gt;
=== Technical Implementation Details ===&lt;br /&gt;
&lt;br /&gt;
Notes about some technical details surrounding multiplayer have been published by the development team in several Friday Facts blog posts:&lt;br /&gt;
&lt;br /&gt;
* [http://www.factorio.com/blog/post/fff-76 Lock step architecture]&lt;br /&gt;
* [http://www.factorio.com/blog/post/fff-99 Client-server connections]&lt;br /&gt;
* [http://www.factorio.com/blog/post/fff-143 NAT punching, introduced in 0.13]&lt;br /&gt;
&lt;br /&gt;
=== DNS SRV Records ===&lt;br /&gt;
Factorio supports [https://www.cloudflare.com/learning/dns/dns-records/dns-srv-record/ DNS SRV records] since 1.1.67. &lt;br /&gt;
&lt;br /&gt;
This makes it easier to have multiple Factorio servers on a single host and allow users to connect to them with distinct subdomains instead of having to enter port numbers.&lt;br /&gt;
&lt;br /&gt;
The service name is &amp;lt;code&amp;gt;_factorio&amp;lt;/code&amp;gt; and it only supports &amp;lt;code&amp;gt;_udp&amp;lt;/code&amp;gt; protocol. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Domain: wube.software&lt;br /&gt;
IP:     192.0.2.2&lt;br /&gt;
Port:   34197&lt;br /&gt;
&lt;br /&gt;
DNS records:&lt;br /&gt;
srv-target     IN A   192.0.2.2 &lt;br /&gt;
_factorio._udp IN SRV 0 0 34197 srv-target.wube.software.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now a Factorio client connecting to wube.software will actually connect to srv-target.wube.software:34197&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example screenshot:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot of SRV record settings Cloudflare dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Log Entries:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Factorio will log a &amp;quot;DNS SRV lookup returned [...]&amp;quot; message when it found a SRV record for the given domain&lt;br /&gt;
* With verbose logging Factorio will also log &amp;quot;DNS SRV lookup for [domain] didn&#039;t return any usable records&amp;quot; when there&#039;s no SRV record&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Tips ===&lt;br /&gt;
* The key for [[Console|console commands]] is also used initiate chat in multiplayer. To execute a command instead of chatting, you need to type &#039;&#039;/c&#039;&#039; before the command. Commands executed are &#039;&#039;visible to all players&#039;&#039;. Additionally, the multiplayer game must have been started with commands allowable for commands to work.&lt;br /&gt;
* Set the player&#039;s color using the command&lt;br /&gt;
 /color r g b&lt;br /&gt;
r, g and b are for red, green and blue respectively (possible values are between 0 and 1, use [https://www.w3schools.com/colors/colors_converter.asp this site] to convert colors to rgb numbers).&lt;br /&gt;
* To give yourself admin access, you need to create a server-adminlist.json in the same directory as factorio-current.log. The file should contain a list of admins, like so: &amp;lt;code&amp;gt;[ &amp;quot;user1&amp;quot;, &amp;quot;user2&amp;quot; ]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file will be created if you promote a player through the console.&lt;br /&gt;
&lt;br /&gt;
== Joining a Multiplayer game ==&lt;br /&gt;
&lt;br /&gt;
As of version 0.13, players no longer necessarily have to port-forward to play with others. Players may join each other through Steam, or by just the port-forwarded host.&lt;br /&gt;
&lt;br /&gt;
Players wishing to join a game may do so in multiple ways:&lt;br /&gt;
&lt;br /&gt;
* Joining by directly inputting a public IP and port into Factorio.&lt;br /&gt;
* Selecting the server from the active public server menu.&lt;br /&gt;
* Joining through Steam&#039;s services.&lt;br /&gt;
* Playing a local LAN game.&lt;br /&gt;
&lt;br /&gt;
=== Joining by IP ===&lt;br /&gt;
&lt;br /&gt;
To join a multiplayer game by IP, you will need to know the public IP of a valid server. You can find this through social media, websites, or by word of mouth. After acquiring the IP and port, simply go to play -&amp;gt; Multiplayer -&amp;gt; Connect to server, and provide all the information it asks for.&lt;br /&gt;
&lt;br /&gt;
If the server has been set up correctly to accept public connections, you should be able to join the game.&lt;br /&gt;
&lt;br /&gt;
=== Joining via server list ===&lt;br /&gt;
&lt;br /&gt;
Factorio&#039;s devs keep a list of all public servers that declare themselves to the service, allowing players to join directly through Factorio. Most of these servers will be password-requiring, but many completely public servers can be connected to. To join via server list, go to Play -&amp;gt; Multiplayer -&amp;gt; Browse public games. Provide your Factorio.com login if asked, and a list of public servers will appear. Simply select one.&lt;br /&gt;
&lt;br /&gt;
=== Joining through Steam ===&lt;br /&gt;
&lt;br /&gt;
Steam provides a &amp;quot;game invite&amp;quot; system, simply use that to join. You can find more info about how to use steam in it&#039;s documentation. &#039;&#039;This is the most recommended way for the average player to use multiplayer with their friends, as it allows Steam to handle everything&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Joining a local LAN game ===&lt;br /&gt;
&lt;br /&gt;
If you have some friends on the same internet connection as you (in the same building or network), you may play a LAN game. Simply go to Play -&amp;gt; Multiplayer -&amp;gt; Play on LAN.&lt;br /&gt;
&lt;br /&gt;
=== Connecting to a Server Behind NAT ===&lt;br /&gt;
&lt;br /&gt;
Factorio requires that the server (in client-server mode) have a publicly accessible IP address or that all players are on the same LAN. If you are behind NAT, you must set up port forwarding ([[Multiplayer#Playing_over_LAN_.2F_Internet|see above]] for port number) or use virtual LAN software such as Hamachi or Evolve.&lt;br /&gt;
&lt;br /&gt;
Multiplayer games will be launched in client-server mode (also [http://www.factorio.com/blog/post/fff-99 multiplayer forwarding] mode). In this mode, all clients send their network traffic to the server and the server forwards the traffic to the other clients. The advantage of this is that it allows games where some players are inside a LAN and others are outside. The disadvantage may be slightly more lag as packets must travel an extra hop (through the server).&lt;br /&gt;
&lt;br /&gt;
* [https://forums.factorio.com/viewtopic.php?f=53&amp;amp;t=6393 Forwarding ports without logging into your router]&lt;br /&gt;
* [https://forums.factorio.com/viewtopic.php?f=53&amp;amp;t=7714 A guide for connecting with Evolve]&lt;br /&gt;
* [http://steamcommunity.com/sharedfiles/filedetails/?id=653628496 A guide for connecting with Hamachi]&lt;br /&gt;
&lt;br /&gt;
== PvP ==&lt;br /&gt;
&lt;br /&gt;
In PvP mode, players can be on different forces. Each force can have one (free-for-all) or more players (teams). Each force has its own independent research progression. Additionally, each force&#039;s [[Military units and structures]] will attack other players as enemies, unless a cease fire is set. Note that, depending on the scenario, cease fires may be unidirectional — setting a cease fire with an opposing force does not guarantee a cease fire from them in return.&lt;br /&gt;
&lt;br /&gt;
To start a PvP game, you can select the &#039;PvP&#039; scenario from the &#039;Play&#039; menu, or download a custom scenario which also supports PvP.&lt;br /&gt;
&lt;br /&gt;
After downloading a PvP scenario, you need to move it to your application directory, and create the multiplayer game using the scenario.&lt;br /&gt;
&lt;br /&gt;
# Download the scenario and place the scenario directory in the &#039;&#039;scenarios&#039;&#039; directory within your [[Application_directory#Directory_locations_by_OS_and_installation_method|user data directory]].&lt;br /&gt;
# Launch Factorio&lt;br /&gt;
# Click &#039;&#039;Play&#039;&#039;&lt;br /&gt;
# Click &#039;&#039;Multiplayer&#039;&#039;&lt;br /&gt;
# Click &#039;&#039;Scenario&#039;&#039;&lt;br /&gt;
# Choose the PvP scenario you want and click &#039;&#039;Create&#039;&#039;&lt;br /&gt;
# Choose latency and other settings, then click &#039;&#039;Play&#039;&#039;&lt;br /&gt;
# Other players can now join the game&lt;br /&gt;
&lt;br /&gt;
=== Forces ===&lt;br /&gt;
&lt;br /&gt;
Forces can be manually created via the console. This allows any map/scenario to be used for PvP. This may not be as convenient as a pre-made PvP scenario, as there will be no way for players to turn on/off cease fires other than through the console.&lt;br /&gt;
&lt;br /&gt;
Each created force has its own research progression and different forces may attack each other.&lt;br /&gt;
&lt;br /&gt;
The console commands for setting up and controlling forces are below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
game.create_force(&amp;quot;Name&amp;quot;)&lt;br /&gt;
--Creates the force &amp;quot;Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
game.players[&amp;quot;Player_name&amp;quot;].force = game.forces[&amp;quot;Name&amp;quot;]&lt;br /&gt;
--Sets this player to the new force&lt;br /&gt;
&lt;br /&gt;
game.forces[&amp;quot;Name&amp;quot;].set_cease_fire(&amp;quot;Other_force_name&amp;quot;, true)&lt;br /&gt;
--Sets the new force ceasefire to the &amp;quot;other force&amp;quot;&lt;br /&gt;
&lt;br /&gt;
game.forces[&amp;quot;Name&amp;quot;].set_spawn_position({x = 10, y = 20}, game.surfaces[1])&lt;br /&gt;
--Sets the spawn position of the force&lt;br /&gt;
&lt;br /&gt;
game.print(#game.forces)&lt;br /&gt;
--Prints the number of forces&lt;br /&gt;
&lt;br /&gt;
for name, force in pairs (game.forces) do&lt;br /&gt;
   game.print(name)&lt;br /&gt;
end&lt;br /&gt;
--Prints the name of all the forces&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ability of players and entities belonging to one force to interact with structures belonging to another, non-friendly force is limited. However, some types of interactions are still possible:&lt;br /&gt;
&lt;br /&gt;
;Manual pickup from belts&lt;br /&gt;
: Players can pick up items traveling along a transport belt that belongs to an opposing force. Note however that this can&#039;t be automated: Inserters will &#039;&#039;not&#039;&#039; take items from an opposing force&#039;s belts.&lt;br /&gt;
;Belt network connection&lt;br /&gt;
: Belts will connect to each other regardless of force membership, so it&#039;s possible to extend an opposing force&#039;s belt line, and items will flow to them. It is also possible to side-load into, and place items onto (with inserters) an opposing force&#039;s belt line.&lt;br /&gt;
;Fluid network connection&lt;br /&gt;
: Pipes (and storage tanks, and pumps, &amp;amp;c) will connect to each other regardless of force membership. For example, it&#039;s possible to pump fluids out of or into a storage tank belonging to an opposing force.&lt;br /&gt;
;Power leeching&lt;br /&gt;
: Players can draw power from an opposing force&#039;s electric network, by building structures inside the coverage area of a power pole belonging to an opposing force. Power poles that you build next to a power pole belonging to an opposing force will automatically connect to it, but will be impossible to connect or disconnect manually.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Narrative history ===&lt;br /&gt;
&lt;br /&gt;
Because of the potentially immense amount of activity on a map, the game engine utilizes a [https://www.factorio.com/blog/post/fff-76 lock step architecture]. All instances of the game run full simulations of the entire world and only player actions are transferred across the network.&lt;br /&gt;
&lt;br /&gt;
Multiplayer games were introduced to Factorio with version 0.11.0. The only connection method available was peer-to-peer mode which meant every player had to be able to directly communicate with every other player. In version 0.12.4, a client-server mode of communication was introduced in which the server (either a dedicated one or the player who hosted the game) relays messages to all peers. This means that direct connection between all players is no longer necessary. As of version 0.13, P2P connecting is completely removed.&lt;br /&gt;
&lt;br /&gt;
As of version 0.12.0, the game features &amp;quot;latency hiding&amp;quot; mechanics where the game simulates some of the player&#039;s actions locally to make some common interactions (such as moving the player&#039;s character) more fluid.  Not every action is a part of latency hiding – most notably, car or train driving and shooting are not a part of it.&lt;br /&gt;
&lt;br /&gt;
=== Version history ===&lt;br /&gt;
&lt;br /&gt;
Maintainer note: The following history may not be fully up to date, or comprehensive. Factorio&#039;s multiplayer has undergone a great deal of small changes since its inception, however this history will provide a rough overview.&lt;br /&gt;
&lt;br /&gt;
{{history|0.14.14|&lt;br /&gt;
* Added multiplayer server option &amp;quot;Autosave only on server&amp;quot;.&lt;br /&gt;
* Deconstructing/canceling deconstruction sets the &amp;quot;last user&amp;quot; on an entity.&lt;br /&gt;
* Decreased the size of connection accept message with lot of mod which could help some people with 50+ mod multiplayer games.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.14.13|&lt;br /&gt;
* Reconnecting to multiplayer game that the player is already in (due to being dropped, most often) instantly closes the previous connection and connects the player.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.14.11|&lt;br /&gt;
* Multiplayer user names can only consist of letters, and &amp;lt;code&amp;gt; -_. &amp;lt;/code&amp;gt; characters.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.14.10|&lt;br /&gt;
* Disabled 32bit (x86) multiplayer. All hosts and members must be running the 64bit (x86_64) version of the game.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.14.8|&lt;br /&gt;
* More than 10 players in one game will reduce the rate the game is saved to the server.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.14.6|&lt;br /&gt;
* Username is now set to username setting, not email.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.14.5|&lt;br /&gt;
* Added AFK Auto kick interval to multiplayer host settings (with never as default).}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.14.3|&lt;br /&gt;
* When save of scenario is loaded in multiplayer, it&#039;s scenario is saved in user scenarios.&lt;br /&gt;
* Added &amp;lt;code&amp;gt;/time&amp;lt;/code&amp;gt; command to print the current map age.&lt;br /&gt;
* Added option to host multiplayer game with scenario (it only had new game/load game there).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.14.2|&lt;br /&gt;
* Can specify limit of upload speed when hosting.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.14.0|&lt;br /&gt;
* Server doesn&#039;t stop/slow down the game when some client is too slow, stops communicating or saves the game longer than the server.&lt;br /&gt;
* Players automatically quit game after 3 desyncs.&lt;br /&gt;
* Removed the option to enable/disable latency hiding, it is always on on clients (and off on the server).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.13.10|&lt;br /&gt;
* Server stdout messages now contain time stamps and message-type tags}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.13.2|&lt;br /&gt;
* Limit multiplayer player name to 60 characters.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.13.0|&lt;br /&gt;
* Improved Multiplayer game UX&lt;br /&gt;
* Server games are published to the server and clients can browse existing games.&lt;br /&gt;
* Removed multiplayer peer-to-peer mode.&lt;br /&gt;
* Building sound is played also for other players in multiplayer.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.31|&lt;br /&gt;
* Human readable error notice when multiplayer connection wasn&#039;t successful. (https://forums.factorio.com/23132)&lt;br /&gt;
* Improved map download speed when connecting to multiplayer game.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.30|&lt;br /&gt;
* Mod checksums are calculated when the game starts and are compared with other peers when joining a multiplayer game. This is to ensure everyone has exactly the same mod in order to prevent desyncs caused by local changes made to mod files.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.28|&lt;br /&gt;
* Added --port to specify which network port the game should use, when hosting with --start-server or --mp-load-game.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.27|&lt;br /&gt;
* The report of different mods when trying to connect to multiplayer game is now scroll-able when needed.&lt;br /&gt;
* Better message when the server leaves a multiplayer game}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.11|&lt;br /&gt;
* Added --no-auto-pause: When running as a server, --no-auto-pause will prevent stopping the game when no players are connected.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.9|&lt;br /&gt;
* Added resume button to multiplayer game menu}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.7|&lt;br /&gt;
*New command line options for the headless server: --disallow-commands and --peer-to-peer}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.5|&lt;br /&gt;
* Multiplayer broadcast (heartbeats) is done via a single message when not using peer2peer.&lt;br /&gt;
* Further optimizations in size of the Multiplayer heartbeat (message sent every tick).&lt;br /&gt;
* LatencyState is suspended when player is killed (and waiting for respawn) in Multiplayer.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.4|&lt;br /&gt;
* Simple mechanism for multiplayer relaying via the server.&lt;br /&gt;
* Less annoying glitches when running and shooting in multiplayer with latency hiding.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.12.0|&lt;br /&gt;
* Multiplayer latency hiding (gives impression that some common tasks are performed immediately)&lt;br /&gt;
* Factorio can run as a dedicated server without graphics.&lt;br /&gt;
* Basic PvP: New forces can now be created and merged back together; a cease-fire can be agreed upon between forces&lt;br /&gt;
* IPv6 support for multiplayer.&lt;br /&gt;
* DNS names can be used when connecting to multiplayer game.&lt;br /&gt;
* Player&#039;s logistic filters are now remembered after respawn in multiplayer&lt;br /&gt;
* Smaller multiplayer heartbeat packet size.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.11.19|&lt;br /&gt;
* Multiplayer dropping threshold is doubled during map upload / download.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.11.17|&lt;br /&gt;
* Autosaves in multiplayer are performed at the same time by all clients (interval is set by hosting player).&lt;br /&gt;
* Progress bar is shown when non-responsive peers are about to be dropped from the game in the Multiplayer.&lt;br /&gt;
* Progress bar is shown when other peers in multiplayer are saving map.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.11.16|&lt;br /&gt;
* Revived character (after dying in multiplayer) are placed on the spawn point instead of the center of the map.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.11.2|&lt;br /&gt;
*  Mods that don&#039;t affect game state are not needed to be synchronized when playing multiplayer game or replaying game.}}&lt;br /&gt;
&lt;br /&gt;
{{history|0.11.0|&lt;br /&gt;
* Introduced}}&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=File:Screenshot_of_SRV_record_settings_Cloudflare_dashboard.png&amp;diff=190463</id>
		<title>File:Screenshot of SRV record settings Cloudflare dashboard.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=File:Screenshot_of_SRV_record_settings_Cloudflare_dashboard.png&amp;diff=190463"/>
		<updated>2022-11-28T13:48:29Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot of an example SRV record setting in the Cloudflare dashboard&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_publish_API&amp;diff=189560</id>
		<title>Mod publish API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_publish_API&amp;diff=189560"/>
		<updated>2022-07-26T15:31:06Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod publish API is used to add new mods to the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Publish Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== init_publish ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/init_publish&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod that will be published.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| upload_url || string || URL the mod zip file should be uploaded to&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== finish_upload ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || &amp;lt;code&amp;gt;$upload_url&amp;lt;/code&amp;gt; URL returned by the init_publish endpoint&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| file || file ||Mod zip file&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Mod description in markdown format&lt;br /&gt;
|- &lt;br /&gt;
| category || enum, optional || Mod category, See [[Mod details API#Category]]&lt;br /&gt;
|- &lt;br /&gt;
| license || enum, optional || Mod category, See [[Mod details API#License]]&lt;br /&gt;
|- &lt;br /&gt;
| source_url || url, optional || Url to mod source code repository&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| InvalidModRelease || Invalid release data in info.json&lt;br /&gt;
|-&lt;br /&gt;
| InvalidModUpload || Invalid mod data in zipfile&lt;br /&gt;
|-&lt;br /&gt;
| ModAlreadyExists || Mod name already exists in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
INIT_UPLOAD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/init_publish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_UPLOAD_API_KEY&amp;quot;)&lt;br /&gt;
modname = sys.argv[1]&lt;br /&gt;
filepath = sys.argv[2]&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(INIT_UPLOAD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;init_upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
upload_url = response.json()[&amp;quot;upload_url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
with open(filepath, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
    request_body = {&amp;quot;file&amp;quot;: f}&lt;br /&gt;
    response = requests.post(upload_url, files=request_body, data={&amp;quot;description&amp;quot;: &amp;quot;# published via API&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;upload successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_images_API&amp;diff=189559</id>
		<title>Mod images API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_images_API&amp;diff=189559"/>
		<updated>2022-07-26T15:30:56Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The mod images API is used to add, reorder or remove mod images on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== add ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/images/add&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod, for which a new image will be uploaded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| upload_url || string || URL the image should be uploaded to&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== finish_upload ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || &amp;lt;code&amp;gt;$upload_url&amp;lt;/code&amp;gt; URL returned by the add endpoint&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| image || Image file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| id || string || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. SHA1 of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| url || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. Url of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| thumbnail || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. Url of thumbnail of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== edit ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/images/edit&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod, for which a new image will be uploaded&lt;br /&gt;
| images || string || List of comma-seperated image ids that should be displayed on the mod page&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| images || list || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. List of objects with id, url and thumbnail attribute same as finish_upload endpoint.&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| InvalidImageUpload || Invalid image file uploaded.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python Examples ==&lt;br /&gt;
=== Add Image ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
INIT_UPLOAD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/images/add&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = sys.argv[1]&lt;br /&gt;
filepath = sys.argv[2]&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(INIT_UPLOAD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;init_upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
upload_url = response.json()[&amp;quot;upload_url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
with open(filepath, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
    request_body = {&amp;quot;image&amp;quot;: f}&lt;br /&gt;
    response = requests.post(upload_url, files=request_body)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;upload successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Edit Images ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/images/edit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
image_ids = [&amp;quot;fdc375d5ca3c263fedafb7ef143c82f9fb668472&amp;quot;, &amp;quot;47bda5cd27ef49fe86fe03f803cb5c351a848586&amp;quot;]&lt;br /&gt;
image_ids_text = &amp;quot;,&amp;quot;.join(image_ids)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;images&amp;quot;: image_ids_text}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=189558</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=189558"/>
		<updated>2022-07-26T15:30:45Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used to change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || strong, optional || URL of mod homepage&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || strong, optional || URL of mod source code repository&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category ||&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;general&amp;lt;/code&amp;gt;|| General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;non-game-changing&amp;lt;/code&amp;gt;|| Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;helper-mods&amp;lt;/code&amp;gt;|| Helper Mods || These mods are not game-changing, but enhance the gameplay by helping you with useful functions. Mods like showing the current game-time, keep track over your resources, rail-laying...&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utility&amp;lt;/code&amp;gt;|| Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;balancing&amp;lt;/code&amp;gt;|| Balancing || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;weapons&amp;lt;/code&amp;gt;|| Weapons || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oil&amp;lt;/code&amp;gt;|| Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power-production&amp;lt;/code&amp;gt;|| Power production || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacture&amp;lt;/code&amp;gt;|| Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;defense&amp;lt;/code&amp;gt;|| Defense || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;|| Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;big-mods&amp;lt;/code&amp;gt;|| Big mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Story mode campaigns on a premade map&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together!&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;libraries&amp;lt;/code&amp;gt;|| Libraries || Mods used by other mods&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=189557</id>
		<title>Factorio HTTP API usage guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=189557"/>
		<updated>2022-07-26T15:30:08Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
Third party clients are welcome to use our HTTP APIs if they provide a benefit to players and creators in the Factorio community.&lt;br /&gt;
We ask developers to:&lt;br /&gt;
* ensure user privacy, e.g. by properly securing account secrets like passwords, tokens or API keys.&lt;br /&gt;
* respect server resources, e.g. by using exponential backoff in case of errors.&lt;br /&gt;
* communicate that their tool/library is in no way sanctioned by or associated with Wube Software.&lt;br /&gt;
We reserve the right to ban or rate limit abusive clients, IP addresses or accounts. Unless stated otherwise, our APIs should be considered internal.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* These APIs are only supported for use with the official Factorio game clients or websites.&lt;br /&gt;
* Up-to-date documentation is not guaranteed.&lt;br /&gt;
* We strive to support very old Factorio releases, so these APIs won&#039;t change much most of the time.&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* These APIs are intended to support developers building integrations with the official Factorio game clients or websites.&lt;br /&gt;
* Documentation will be kept up-to-date.&lt;br /&gt;
* Breaking changes to these APIs are communicated in a reasonable timeframe.&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* Short-lived, unstable APIs&lt;br /&gt;
* For testing new features with the community&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* [[Download API]]&lt;br /&gt;
* [[Matchmaking API]]&lt;br /&gt;
* [[Mod portal API]]&lt;br /&gt;
* [[Web authentication API]]&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* [[Mod upload API]]&lt;br /&gt;
* [[Mod details API ]]&lt;br /&gt;
* [[Mod images API ]]&lt;br /&gt;
* [[Mod publish API ]]&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_publish_API&amp;diff=189556</id>
		<title>Mod publish API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_publish_API&amp;diff=189556"/>
		<updated>2022-07-26T15:29:51Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Experimental|Experimental API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The mod publish API is used to add new mods to the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Publish Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== init_publish ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/init_publish&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod that will be published.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| upload_url || string || URL the mod zip file should be uploaded to&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== finish_upload ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || &amp;lt;code&amp;gt;$upload_url&amp;lt;/code&amp;gt; URL returned by the init_publish endpoint&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| file || file ||Mod zip file&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Mod description in markdown format&lt;br /&gt;
|- &lt;br /&gt;
| category || enum, optional || Mod category, See [[Mod details API#Category]]&lt;br /&gt;
|- &lt;br /&gt;
| license || enum, optional || Mod category, See [[Mod details API#License]]&lt;br /&gt;
|- &lt;br /&gt;
| source_url || url, optional || Url to mod source code repository&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| InvalidModRelease || Invalid release data in info.json&lt;br /&gt;
|-&lt;br /&gt;
| InvalidModUpload || Invalid mod data in zipfile&lt;br /&gt;
|-&lt;br /&gt;
| ModAlreadyExists || Mod name already exists in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
INIT_UPLOAD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/init_publish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_UPLOAD_API_KEY&amp;quot;)&lt;br /&gt;
modname = sys.argv[1]&lt;br /&gt;
filepath = sys.argv[2]&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(INIT_UPLOAD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;init_upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
upload_url = response.json()[&amp;quot;upload_url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
with open(filepath, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
    request_body = {&amp;quot;file&amp;quot;: f}&lt;br /&gt;
    response = requests.post(upload_url, files=request_body, data={&amp;quot;description&amp;quot;: &amp;quot;# published via API&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;upload successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_images_API&amp;diff=189555</id>
		<title>Mod images API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_images_API&amp;diff=189555"/>
		<updated>2022-07-26T15:29:18Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Experimental|Experimental API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The mod images API is used to add, reorder or remove mod images on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== add ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/images/add&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod, for which a new image will be uploaded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| upload_url || string || URL the image should be uploaded to&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== finish_upload ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || &amp;lt;code&amp;gt;$upload_url&amp;lt;/code&amp;gt; URL returned by the add endpoint&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| image || Image file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| id || string || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. SHA1 of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| url || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. Url of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| thumbnail || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. Url of thumbnail of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== edit ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/images/edit&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod, for which a new image will be uploaded&lt;br /&gt;
| images || string || List of comma-seperated image ids that should be displayed on the mod page&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| images || list || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. List of objects with id, url and thumbnail attribute same as finish_upload endpoint.&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| InvalidImageUpload || Invalid image file uploaded.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python Examples ==&lt;br /&gt;
=== Add Image ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
INIT_UPLOAD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/images/add&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = sys.argv[1]&lt;br /&gt;
filepath = sys.argv[2]&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(INIT_UPLOAD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;init_upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
upload_url = response.json()[&amp;quot;upload_url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
with open(filepath, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
    request_body = {&amp;quot;image&amp;quot;: f}&lt;br /&gt;
    response = requests.post(upload_url, files=request_body)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;upload successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Edit Images ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/images/edit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
image_ids = [&amp;quot;fdc375d5ca3c263fedafb7ef143c82f9fb668472&amp;quot;, &amp;quot;47bda5cd27ef49fe86fe03f803cb5c351a848586&amp;quot;]&lt;br /&gt;
image_ids_text = &amp;quot;,&amp;quot;.join(image_ids)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;images&amp;quot;: image_ids_text}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=189554</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=189554"/>
		<updated>2022-07-26T15:28:40Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Experimental|Experimental API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used to change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || strong, optional || URL of mod homepage&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || strong, optional || URL of mod source code repository&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category ||&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;general&amp;lt;/code&amp;gt;|| General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;non-game-changing&amp;lt;/code&amp;gt;|| Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;helper-mods&amp;lt;/code&amp;gt;|| Helper Mods || These mods are not game-changing, but enhance the gameplay by helping you with useful functions. Mods like showing the current game-time, keep track over your resources, rail-laying...&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utility&amp;lt;/code&amp;gt;|| Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;balancing&amp;lt;/code&amp;gt;|| Balancing || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;weapons&amp;lt;/code&amp;gt;|| Weapons || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oil&amp;lt;/code&amp;gt;|| Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power-production&amp;lt;/code&amp;gt;|| Power production || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacture&amp;lt;/code&amp;gt;|| Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;defense&amp;lt;/code&amp;gt;|| Defense || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;|| Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;big-mods&amp;lt;/code&amp;gt;|| Big mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Story mode campaigns on a premade map&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together!&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;libraries&amp;lt;/code&amp;gt;|| Libraries || Mods used by other mods&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=189553</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=189553"/>
		<updated>2022-07-26T15:28:25Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Experimental|Experimental API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used to change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || strong, optional || URL of mod homepage&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || strong, optional || URL of mod source code repository&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category ||&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;general&amp;lt;/code&amp;gt;|| General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;non-game-changing&amp;lt;/code&amp;gt;|| Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;helper-mods&amp;lt;/code&amp;gt;|| Helper Mods || These mods are not game-changing, but enhance the gameplay by helping you with useful functions. Mods like showing the current game-time, keep track over your resources, rail-laying...&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utility&amp;lt;/code&amp;gt;|| Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;balancing&amp;lt;/code&amp;gt;|| Balancing || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;weapons&amp;lt;/code&amp;gt;|| Weapons || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oil&amp;lt;/code&amp;gt;|| Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power-production&amp;lt;/code&amp;gt;|| Power production || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacture&amp;lt;/code&amp;gt;|| Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;defense&amp;lt;/code&amp;gt;|| Defense || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;|| Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;big-mods&amp;lt;/code&amp;gt;|| Big mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Story mode campaigns on a premade map&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together!&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;libraries&amp;lt;/code&amp;gt;|| Libraries || Mods used by other mods&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/experimental/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=189433</id>
		<title>Factorio HTTP API usage guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=189433"/>
		<updated>2022-06-28T13:08:16Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
Third party clients are welcome to use our HTTP APIs if they provide a benefit to players and creators in the Factorio community.&lt;br /&gt;
We ask developers to:&lt;br /&gt;
* ensure user privacy, e.g. by properly securing account secrets like passwords, tokens or API keys.&lt;br /&gt;
* respect server resources, e.g. by using exponential backoff in case of errors.&lt;br /&gt;
* communicate that their tool/library is in no way sanctioned by or associated with Wube Software.&lt;br /&gt;
We reserve the right to ban or rate limit abusive clients, IP addresses or accounts. Unless stated otherwise, our APIs should be considered internal.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* These APIs are only supported for use with the official Factorio game clients or websites.&lt;br /&gt;
* Up-to-date documentation is not guaranteed.&lt;br /&gt;
* We strive to support very old Factorio releases, so these APIs won&#039;t change much most of the time.&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* These APIs are intended to support developers building integrations with the official Factorio game clients or websites.&lt;br /&gt;
* Documentation will be kept up-to-date.&lt;br /&gt;
* Breaking changes to these APIs are communicated in a reasonable timeframe.&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* Short-lived, unstable APIs&lt;br /&gt;
* For testing new features with the community&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* [[Download API]]&lt;br /&gt;
* [[Matchmaking API]]&lt;br /&gt;
* [[Mod portal API]]&lt;br /&gt;
* [[Web authentication API]]&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* [[Mod upload API]]&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* [[Mod details API ]]&lt;br /&gt;
* [[Mod images API ]]&lt;br /&gt;
* [[Mod publish API ]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_publish_API&amp;diff=189432</id>
		<title>Mod publish API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_publish_API&amp;diff=189432"/>
		<updated>2022-06-28T13:08:11Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Experimental|Experimental API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The mod publish API is used to add new mods to the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Publish Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== init_publish ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/experimental/mods/init_publish&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod that will be published.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| upload_url || string || URL the mod zip file should be uploaded to&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== finish_upload ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || &amp;lt;code&amp;gt;$upload_url&amp;lt;/code&amp;gt; URL returned by the init_publish endpoint&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| file || file ||Mod zip file&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Mod description in markdown format&lt;br /&gt;
|- &lt;br /&gt;
| category || enum, optional || Mod category, See [[Mod details API#Category]]&lt;br /&gt;
|- &lt;br /&gt;
| license || enum, optional || Mod category, See [[Mod details API#License]]&lt;br /&gt;
|- &lt;br /&gt;
| source_url || url, optional || Url to mod source code repository&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| InvalidModRelease || Invalid release data in info.json&lt;br /&gt;
|-&lt;br /&gt;
| InvalidModUpload || Invalid mod data in zipfile&lt;br /&gt;
|-&lt;br /&gt;
| ModAlreadyExists || Mod name already exists in mod portal&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Python example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
INIT_UPLOAD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/experimental/mods/init_publish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_UPLOAD_API_KEY&amp;quot;)&lt;br /&gt;
modname = sys.argv[1]&lt;br /&gt;
filepath = sys.argv[2]&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(INIT_UPLOAD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;init_upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
upload_url = response.json()[&amp;quot;upload_url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
with open(filepath, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
    request_body = {&amp;quot;file&amp;quot;: f}&lt;br /&gt;
    response = requests.post(upload_url, files=request_body, data={&amp;quot;description&amp;quot;: &amp;quot;# published via API&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;upload successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_publish_API&amp;diff=189431</id>
		<title>Mod publish API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_publish_API&amp;diff=189431"/>
		<updated>2022-06-28T13:07:23Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: Created page with &amp;quot;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Category:&amp;#039;&amp;#039;&amp;#039; Experimental API&amp;lt;/div&amp;gt; The mod publish API is used to add new mods to the...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Experimental|Experimental API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The mod publish API is used to add new mods to the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Publish Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== init_publish ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/experimental/mods/init_publish&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod that will be published.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| upload_url || string || URL the mod zip file should be uploaded to&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== finish_upload ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || &amp;lt;code&amp;gt;$upload_url&amp;lt;/code&amp;gt; URL returned by the init_upload endpoint&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| file || file ||Mod zip file&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Mod description in markdown format&lt;br /&gt;
|- &lt;br /&gt;
| category || enum, optional || Mod category, See [[Mod details API#Category]]&lt;br /&gt;
|- &lt;br /&gt;
| license || enum, optional || Mod category, See [[Mod details API#License]]&lt;br /&gt;
|- &lt;br /&gt;
| source_url || url, optional || Url to mod source code repository&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| InvalidModRelease || Invalid release data in info.json&lt;br /&gt;
|-&lt;br /&gt;
| InvalidModUpload || Invalid mod data in zipfile&lt;br /&gt;
|-&lt;br /&gt;
| ModAlreadyExists || Mod name already exists in mod portal&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Python example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
INIT_UPLOAD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/experimental/mods/init_publish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_UPLOAD_API_KEY&amp;quot;)&lt;br /&gt;
modname = sys.argv[1]&lt;br /&gt;
filepath = sys.argv[2]&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(INIT_UPLOAD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;init_upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
upload_url = response.json()[&amp;quot;upload_url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
with open(filepath, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
    request_body = {&amp;quot;file&amp;quot;: f}&lt;br /&gt;
    response = requests.post(upload_url, files=request_body, data={&amp;quot;description&amp;quot;: &amp;quot;# published via API&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;upload successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=189430</id>
		<title>Factorio HTTP API usage guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=189430"/>
		<updated>2022-06-28T12:33:28Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
Third party clients are welcome to use our HTTP APIs if they provide a benefit to players and creators in the Factorio community.&lt;br /&gt;
We ask developers to:&lt;br /&gt;
* ensure user privacy, e.g. by properly securing account secrets like passwords, tokens or API keys.&lt;br /&gt;
* respect server resources, e.g. by using exponential backoff in case of errors.&lt;br /&gt;
* communicate that their tool/library is in no way sanctioned by or associated with Wube Software.&lt;br /&gt;
We reserve the right to ban or rate limit abusive clients, IP addresses or accounts. Unless stated otherwise, our APIs should be considered internal.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* These APIs are only supported for use with the official Factorio game clients or websites.&lt;br /&gt;
* Up-to-date documentation is not guaranteed.&lt;br /&gt;
* We strive to support very old Factorio releases, so these APIs won&#039;t change much most of the time.&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* These APIs are intended to support developers building integrations with the official Factorio game clients or websites.&lt;br /&gt;
* Documentation will be kept up-to-date.&lt;br /&gt;
* Breaking changes to these APIs are communicated in a reasonable timeframe.&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* Short-lived, unstable APIs&lt;br /&gt;
* For testing new features with the community&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* [[Download API]]&lt;br /&gt;
* [[Matchmaking API]]&lt;br /&gt;
* [[Mod portal API]]&lt;br /&gt;
* [[Web authentication API]]&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* [[Mod upload API]]&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* [[Mod details API ]]&lt;br /&gt;
* [[Mod images API ]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_images_API&amp;diff=189429</id>
		<title>Mod images API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_images_API&amp;diff=189429"/>
		<updated>2022-06-28T12:31:35Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: Created page with &amp;quot;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Category:&amp;#039;&amp;#039;&amp;#039; Experimental API&amp;lt;/div&amp;gt; The mod images API is used to add, reorder or remov...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Experimental|Experimental API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The mod images API is used to add, reorder or remove mod images on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== add ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/experimental/mods/images/add&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod, for which a new image will be uploaded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| upload_url || string || URL the image should be uploaded to&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== finish_upload ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || &amp;lt;code&amp;gt;$upload_url&amp;lt;/code&amp;gt; URL returned by the add endpoint&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| image || Image file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| id || string || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. SHA1 of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| url || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. Url of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| thumbnail || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. Url of thumbnail of the uploaded image.&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== edit ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/experimental/mods/images/edit&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod, for which a new image will be uploaded&lt;br /&gt;
| images || string || List of comma-seperated image ids that should be displayed on the mod page&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| images || list || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. List of objects with id, url and thumbnail attribute same as finish_upload endpoint.&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| InvalidImageUpload || Invalid image file uploaded.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python Examples ==&lt;br /&gt;
=== Add Image ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
INIT_UPLOAD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/experimental/mods/images/add&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = sys.argv[1]&lt;br /&gt;
filepath = sys.argv[2]&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(INIT_UPLOAD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;init_upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
upload_url = response.json()[&amp;quot;upload_url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
with open(filepath, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
    request_body = {&amp;quot;image&amp;quot;: f}&lt;br /&gt;
    response = requests.post(upload_url, files=request_body)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;upload failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;upload successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Edit Images ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/experimental/mods/images/edit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
image_ids = [&amp;quot;fdc375d5ca3c263fedafb7ef143c82f9fb668472&amp;quot;, &amp;quot;47bda5cd27ef49fe86fe03f803cb5c351a848586&amp;quot;]&lt;br /&gt;
image_ids_text = &amp;quot;,&amp;quot;.join(image_ids)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;images&amp;quot;: image_ids_text}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=189428</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=189428"/>
		<updated>2022-06-28T08:50:36Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Experimental|Experimental API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used to change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/experimental/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || strong, optional || URL of mod homepage&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || strong, optional || URL of mod source code repository&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category ||&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;general&amp;lt;/code&amp;gt;|| General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;non-game-changing&amp;lt;/code&amp;gt;|| Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;helper-mods&amp;lt;/code&amp;gt;|| Helper Mods || These mods are not game-changing, but enhance the gameplay by helping you with useful functions. Mods like showing the current game-time, keep track over your resources, rail-laying...&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utility&amp;lt;/code&amp;gt;|| Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;balancing&amp;lt;/code&amp;gt;|| Balancing || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;weapons&amp;lt;/code&amp;gt;|| Weapons || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oil&amp;lt;/code&amp;gt;|| Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power-production&amp;lt;/code&amp;gt;|| Power production || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacture&amp;lt;/code&amp;gt;|| Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;defense&amp;lt;/code&amp;gt;|| Defense || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;|| Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;big-mods&amp;lt;/code&amp;gt;|| Big mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Story mode campaigns on a premade map&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together!&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;libraries&amp;lt;/code&amp;gt;|| Libraries || Mods used by other mods&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/experimental/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=189427</id>
		<title>Factorio HTTP API usage guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=189427"/>
		<updated>2022-06-28T08:48:59Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: link mod details API&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
Third party clients are welcome to use our HTTP APIs if they provide a benefit to players and creators in the Factorio community.&lt;br /&gt;
We ask developers to:&lt;br /&gt;
* ensure user privacy, e.g. by properly securing account secrets like passwords, tokens or API keys.&lt;br /&gt;
* respect server resources, e.g. by using exponential backoff in case of errors.&lt;br /&gt;
* communicate that their tool/library is in no way sanctioned by or associated with Wube Software.&lt;br /&gt;
We reserve the right to ban or rate limit abusive clients, IP addresses or accounts. Unless stated otherwise, our APIs should be considered internal.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* These APIs are only supported for use with the official Factorio game clients or websites.&lt;br /&gt;
* Up-to-date documentation is not guaranteed.&lt;br /&gt;
* We strive to support very old Factorio releases, so these APIs won&#039;t change much most of the time.&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* These APIs are intended to support developers building integrations with the official Factorio game clients or websites.&lt;br /&gt;
* Documentation will be kept up-to-date.&lt;br /&gt;
* Breaking changes to these APIs are communicated in a reasonable timeframe.&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* Short-lived, unstable APIs&lt;br /&gt;
* For testing new features with the community&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* [[Download API]]&lt;br /&gt;
* [[Matchmaking API]]&lt;br /&gt;
* [[Mod portal API]]&lt;br /&gt;
* [[Web authentication API]]&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* [[Mod upload API]]&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* [[Mod details API ]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=189426</id>
		<title>Mod details API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_details_API&amp;diff=189426"/>
		<updated>2022-06-28T08:48:01Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: initial mod details API documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Experimental|Experimental API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mod details API is used the change mod information like the description on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Edit Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
=== edit_details ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/experimental/mods/edit_details &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string, mandatory || Internal name of the mod whose details are to be changed&lt;br /&gt;
|-&lt;br /&gt;
| title || string, optional || Display name of the mod&lt;br /&gt;
|-&lt;br /&gt;
| summary || string, optional || Short description of the mod&lt;br /&gt;
|-&lt;br /&gt;
| description || string, optional || Long description of the mod in markdown format&lt;br /&gt;
|-&lt;br /&gt;
| category || enum, optional || Mod category, see [[#Category]]&lt;br /&gt;
|-&lt;br /&gt;
| license || enum, optional || Mod license, see [[#License]]&lt;br /&gt;
|-&lt;br /&gt;
| homepage || strong, optional || URL of mod homepage&lt;br /&gt;
|-&lt;br /&gt;
| deprecated || bool, optional || Deprecated flag to hide mod from public listings&lt;br /&gt;
|-&lt;br /&gt;
| source_url || strong, optional || URL of mod source code repository&lt;br /&gt;
|-&lt;br /&gt;
| faq || string, optional || FAQ for the mod in markdown format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| url || string || This attribute only appears for &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; requests. URL path to get mod details endpoint&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Enums ==&lt;br /&gt;
=== Category ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;empty string&amp;gt;&amp;lt;/code&amp;gt;|| No category ||&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;code&amp;gt;general&amp;lt;/code&amp;gt;|| General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;non-game-changing&amp;lt;/code&amp;gt;|| Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, etc.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;helper-mods&amp;lt;/code&amp;gt;|| Helper Mods || These mods are not game-changing, but enhance the gameplay by helping you with useful functions. Mods like showing the current game-time, keep track over your resources, rail-laying...&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;transportation&amp;lt;/code&amp;gt;|| Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistics&amp;lt;/code&amp;gt;|| Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;utility&amp;lt;/code&amp;gt;|| Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;balancing&amp;lt;/code&amp;gt;|| Balancing || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;weapons&amp;lt;/code&amp;gt;|| Weapons || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enemies&amp;lt;/code&amp;gt;|| Enemies || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt;|| Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oil&amp;lt;/code&amp;gt;|| Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logistic-network&amp;lt;/code&amp;gt;|| Logistic network || Related to roboports and logistic robots&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;circuit-network&amp;lt;/code&amp;gt;|| Circuit network || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;|| Storage || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;power-production&amp;lt;/code&amp;gt;|| Power production || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;manufacture&amp;lt;/code&amp;gt;|| Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blueprints&amp;lt;/code&amp;gt;|| Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cheats&amp;lt;/code&amp;gt;|| Cheats || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;defense&amp;lt;/code&amp;gt;|| Defense || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mining&amp;lt;/code&amp;gt;|| Mining || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt;|| Environment || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;|| Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;trains&amp;lt;/code&amp;gt;|| Trains || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;big-mods&amp;lt;/code&amp;gt;|| Big mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scenarios&amp;lt;/code&amp;gt;|| Scenarios || Story mode campaigns on a premade map&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mod-packs&amp;lt;/code&amp;gt;|| Mod packs || Collections of mods with tweaks to make them work together!&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;libraries&amp;lt;/code&amp;gt;|| Libraries || Mods used by other mods&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description !! URL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mit&amp;lt;/code&amp;gt;|| MIT || A permissive license that is short and to the point. It lets people do anything with your code with proper attribution and without warranty. || https://opensource.org/licenses/MIT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnugplv3&amp;lt;/code&amp;gt;|| GNU GPLv3 || The GNU GPL is the most widely used free software license and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same license. || https://opensource.org/licenses/gpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_gnulgplv3&amp;lt;/code&amp;gt;|| GNU LGPLv3 || Version 3 of the GNU LGPL is an additional set of permissions to the GNU GPLv3 license that requires that derived works be licensed under the same license, but works that only link to it do not fall under this restriction. || https://opensource.org/licenses/lgpl-3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_mozilla2&amp;lt;/code&amp;gt;|| Mozilla Public License 2.0 || The Mozilla Public License (MPL 2.0) is maintained by the Mozilla foundation. This license attempts to be a compromise between the permissive BSD license and the reciprocal GPL license. || https://opensource.org/licenses/mpl-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_apache2&amp;lt;/code&amp;gt;|| Apache License 2.0 || A permissive license that also provides an express grant of patent rights from contributors to users. || https://opensource.org/licenses/apache-2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;default_unlicense&amp;lt;/code&amp;gt;|| The Unlicense (Public Domain) || Because copyright is automatic in most countries, the Unlicense is a template to waive copyright interest in software you&#039;ve written and dedicate it to the public domain. Use the Unlicense to opt out of copyright entirely. It also includes the no-warranty statement from the MIT/X11 license. || http://unlicense.org/&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_$ID&amp;lt;/code&amp;gt;|| Custom || Custom license. The ID can be taken from the edit URL on the &amp;quot;My licenses&amp;quot; page on the mod portal. &amp;lt;code&amp;gt;mods.factorio.com/licenses/edit/$ID&amp;lt;/code&amp;gt; || https://mods.factorio.com/licenses&lt;br /&gt;
|}&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
EDIT_MOD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/experimental/mods/edit_details&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_EDIT_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = data = {&amp;quot;mod&amp;quot;: modname, &amp;quot;faq&amp;quot;: &amp;quot;# hello world&amp;quot;}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(EDIT_MOD_URL, data=request_body, headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:&lt;br /&gt;
    print(f&amp;quot;edit failed: {response.text}&amp;quot;)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;edit successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=188742</id>
		<title>Mod portal API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=188742"/>
		<updated>2022-03-22T13:50:20Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: /* /api/mods */ document sort and sort_order parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Internal|Internal API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Mod Portal API is used to both browse and download all mods available on the [https://mods.factorio.com/ official Factorio mod portal]. Using the API does not require any kind of authentication or account information and can be viewed simply by following the URLs below in any web browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More detailed information about a particular mod can be obtained by retrieving the following URL, where {name} is the mod&#039;s name field in the result object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get even more information about a mod, you can use the following URL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}/full&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== /api/mods ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Values !! Description&lt;br /&gt;
|-&lt;br /&gt;
| hide_deprecated || {boolean} || Only return non-deprecated mods. &lt;br /&gt;
|-&lt;br /&gt;
| page ||{an integer}||Page number you would like to show. Makes it so you can see a certain part of the list without getting detail on all&lt;br /&gt;
|-&lt;br /&gt;
| page_size ||{an integer or &#039;max&#039;}||The amount of results to show in your search&lt;br /&gt;
|-&lt;br /&gt;
| sort || {enum, one of name, created_at or updated_at} || Sort results by this property. Defaults to name when not defined. Ignored for &amp;lt;code&amp;gt;page_size=max&amp;lt;/code&amp;gt; queries.&lt;br /&gt;
|-&lt;br /&gt;
| sort_order || {enum, one of asc or desc} || Sort results ascending or descending. Defaults to descending when not defined. Ignored for &amp;lt;code&amp;gt;page_size=max&amp;lt;/code&amp;gt; queries.&lt;br /&gt;
|-&lt;br /&gt;
| namelist || {array of strings} || Return only mods that match the given names. &lt;br /&gt;
|-&lt;br /&gt;
| version || {enum, one of 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 1.0 or 1.1} || Only return non-deprecated mods compatible with this Factorio version&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Returns [[#Mod List Response]]&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name} ===&lt;br /&gt;
&lt;br /&gt;
Return short information of a specific mod.&lt;br /&gt;
&lt;br /&gt;
See [[#Result Entry]], &amp;quot;Short&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name}/full ===&lt;br /&gt;
&lt;br /&gt;
Returns more information of a mod.&lt;br /&gt;
&lt;br /&gt;
See [[#Result Entry]], &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
== JSON Object Types ==&lt;br /&gt;
&lt;br /&gt;
=== Mod List Response ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| pagination || [[#Pagination|Pagination]] || See [[#Pagination]]&lt;br /&gt;
|-&lt;br /&gt;
| results || [[#Result Entry|Result]][] || A list of mods, matching any filters you specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| count || Integer || Total number of mods that match your specified filters.&lt;br /&gt;
|-&lt;br /&gt;
| links || [[#Pagination_Links|Links]] || Utility links to mod portal api requests, preserving all filters and search queries.&lt;br /&gt;
|-&lt;br /&gt;
| page || Integer || The current page number.&lt;br /&gt;
|-&lt;br /&gt;
| page_count || Integer || The total number of pages returned.&lt;br /&gt;
|-&lt;br /&gt;
| page_size || Integer || The number of results per page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| first || String(URL) || URL to the first page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|- &lt;br /&gt;
| prev || String(URL) || URL to the previous page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|-&lt;br /&gt;
| next || String(URL) || URL to the next page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|-&lt;br /&gt;
| last || String(URL) || URL to the last page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Result Entry ===&lt;br /&gt;
&lt;br /&gt;
Fields returned by the api/mods endpoint are marked with a check (✓) in the &amp;quot;api/mods endpoint&amp;quot; column, those returned by the api/mods/{name} endpoint are marked with a check in the &amp;quot;Short&amp;quot; column and those returned by the api/mods/{name}/full endpoint are marked in the &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | api/mods endpoint !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Short !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Full !! Description&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || ✓ || ✓ || ✓&lt;br /&gt;
| Number of downloads.&lt;br /&gt;
|-&lt;br /&gt;
| latest_release || [[#Releases|Release]] || ✓ || ||&lt;br /&gt;
| The latest version of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| name || String || ✓ || ✓ || ✓&lt;br /&gt;
| The mod&#039;s machine-readable ID string.&lt;br /&gt;
|-&lt;br /&gt;
| owner || String || ✓ || ✓ || ✓&lt;br /&gt;
| The Factorio username of the mod&#039;s author.&lt;br /&gt;
|-&lt;br /&gt;
| releases || [[#Releases|Release]][] || || ✓ || ✓&lt;br /&gt;
| A list of different versions of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| summary || String || ✓ || ✓ || ✓&lt;br /&gt;
| A shorter mod description.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || ✓ || ✓ || ✓&lt;br /&gt;
| The mod&#039;s human-readable name.&lt;br /&gt;
|-&lt;br /&gt;
| category || [[#Tags|Tag]]? || ✓ || ✓ || ✓&lt;br /&gt;
| A single tag describing the mod. Warning: Seems to be absent sometimes. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
| changelog || String || || || ✓&lt;br /&gt;
| A string describing the recent changes to a mod&lt;br /&gt;
|- &lt;br /&gt;
| created_at || String(ISO 8601) || || || ✓&lt;br /&gt;
| ISO 6501 for when the mod was created.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || || || ✓&lt;br /&gt;
| A longer description of the mod, in text only format.&lt;br /&gt;
|-&lt;br /&gt;
| github_path || String || || || ✓&lt;br /&gt;
| A link to the mod&#039;s github project page, just prepend &amp;quot;github.com/&amp;quot;. Can be blank (&amp;quot;&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| homepage || String || || || ✓&lt;br /&gt;
| Usually a URL to the mod&#039;s main project page, but can be any string.&lt;br /&gt;
|-&lt;br /&gt;
| tag || [[#Tags|Tag]][] || || || ✓&lt;br /&gt;
| A list of tag objects that categorize the mod. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Releases ===&lt;br /&gt;
&lt;br /&gt;
Only difference here between the api/mods/{name} endpoint and the api/mods/{name}/full endpoint is that the full one includes an array of dependencies in the info_json object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| download_url || String &lt;br /&gt;
| Path to download for a mod. starts with &amp;quot;/download&amp;quot; and does not include a full url. See [[#Downloading Mods]]&lt;br /&gt;
|-&lt;br /&gt;
| file_name || String &lt;br /&gt;
| The file name of the release. Always seems to follow the pattern &amp;quot;{name}_{version}.zip&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| info_json || Object &lt;br /&gt;
| A copy of the mod&#039;s info.json file, only contains factorio_version in short version, also contains an array of dependencies in full version&lt;br /&gt;
|- &lt;br /&gt;
| released_at || String(ISO 8601) &lt;br /&gt;
| ISO 6501 for when the mod was released.&lt;br /&gt;
|-&lt;br /&gt;
| version || String &lt;br /&gt;
| The version string of this mod release. Used to determine dependencies. &lt;br /&gt;
|-&lt;br /&gt;
| sha1 || String &lt;br /&gt;
| The sha1 key for the file&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this tag.&lt;br /&gt;
|-&lt;br /&gt;
| name || String || An all lower-case string used to identify this tag internally.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || The tag&#039;s human-readable tag name.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || A short description for the tag.&lt;br /&gt;
|-&lt;br /&gt;
| type || String || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Currently, there are only a fixed number of tags available, these include:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! id !! type !! name !! title !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || t || general || General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
| 2 || t || non-game-changing || Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, ... such things.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || t || helper-mods || Helper Mods || These mods are not game-changing, but enhance the gameplay by helping you with useful functions. Mods like showing the current game-time, keep track over your resources, rail-laying...&lt;br /&gt;
|-&lt;br /&gt;
| 6 || t || big-mods || Big Mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
| 12 || t || transportation || Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
| 13 || t || logistics || Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
| 14 || t || utility || Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || t || balancing || Balancing || Makes the game much more fair&lt;br /&gt;
|-&lt;br /&gt;
| 17 || t || enemies || Enemies || Adds more enemies for more challange&lt;br /&gt;
|-&lt;br /&gt;
| 16 || t || weapons || Weapons || Adds more weapons to annihilate the enemy&lt;br /&gt;
|-&lt;br /&gt;
| 18 || t || armor || Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || t || oil || Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
| 20 || t || logistics-network || Logistics Network || Related to roboports and logistic robots&lt;br /&gt;
|- &lt;br /&gt;
| 21 || t || storage || Storage || Allows more ways to be able to store items&lt;br /&gt;
|-&lt;br /&gt;
| 22 || t || power-production || Power Production || Allows more ways to create mass amounts of energy&lt;br /&gt;
|-&lt;br /&gt;
| 23 || t || manufacture || Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
| 24 || t || blueprints || Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
| 25 || t || cheats || Cheats || Well, they let you cheat&lt;br /&gt;
|- &lt;br /&gt;
| 26 || t || defense || Defense || Mods that add the ability to protect your base more&lt;br /&gt;
|-&lt;br /&gt;
| 27 || t || mining || Mining || Mods that provide better or new ways of mining resources&lt;br /&gt;
|-&lt;br /&gt;
| 28 || t || info || Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
| 29 || t || trains || Trains || Related to trains&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| detail || String ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Downloading Mods ==&lt;br /&gt;
&lt;br /&gt;
You can get the full url by appending the download_url to mods.factorio.com, but if you&#039;re not authenticated, you will be redirected to mods.factorio.com/login. Logging in to that would give you access to the file. Fortunately, there&#039;s a better way to do this. Simply adding username and token parameters to the download url will prevent the redirecting and let you download the file immediately. The token can be acquired from a json file called &amp;quot;player-data.json&amp;quot;, located in the User Data directory (see [[Application_directory#User_data_directory]]). You can also get the token by using the [[Web_authentication_API | Web Authentication API]].&lt;br /&gt;
&lt;br /&gt;
Example usage:&lt;br /&gt;
https://mods.factorio.com/{download_url}?username={username}&amp;amp;token={token}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=188739</id>
		<title>Mod portal API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=188739"/>
		<updated>2022-03-21T11:36:04Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: /* /api/mods */  document version and hide_deprecated parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Internal|Internal API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Mod Portal API is used to both browse and download all mods available on the [https://mods.factorio.com/ official Factorio mod portal]. Using the API does not require any kind of authentication or account information and can be viewed simply by following the URLs below in any web browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More detailed information about a particular mod can be obtained by retrieving the following URL, where {name} is the mod&#039;s name field in the result object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get even more information about a mod, you can use the following URL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}/full&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== /api/mods ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Values !! Description&lt;br /&gt;
|-&lt;br /&gt;
| page ||{an integer}||Page number you would like to show. Makes it so you can see a certain part of the list without getting detail on all&lt;br /&gt;
|-&lt;br /&gt;
| page_size ||{an integer or &#039;max&#039;}||The amount of results to show in your search&lt;br /&gt;
|-&lt;br /&gt;
| namelist || {array of strings} || Return only mods that match the given names. &lt;br /&gt;
|-&lt;br /&gt;
| hide_deprecated || {boolean} || Only return non-deprecated mods. &lt;br /&gt;
|-&lt;br /&gt;
| version || {enum, one of 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 1.0 or 1.1} || Only return non-deprecated mods compatible with this Factorio version&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Returns [[#Mod List Response]]&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name} ===&lt;br /&gt;
&lt;br /&gt;
Return short information of a specific mod.&lt;br /&gt;
&lt;br /&gt;
See [[#Result Entry]], &amp;quot;Short&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name}/full ===&lt;br /&gt;
&lt;br /&gt;
Returns more information of a mod.&lt;br /&gt;
&lt;br /&gt;
See [[#Result Entry]], &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
== JSON Object Types ==&lt;br /&gt;
&lt;br /&gt;
=== Mod List Response ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| pagination || [[#Pagination|Pagination]] || See [[#Pagination]]&lt;br /&gt;
|-&lt;br /&gt;
| results || [[#Result Entry|Result]][] || A list of mods, matching any filters you specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| count || Integer || Total number of mods that match your specified filters.&lt;br /&gt;
|-&lt;br /&gt;
| links || [[#Pagination_Links|Links]] || Utility links to mod portal api requests, preserving all filters and search queries.&lt;br /&gt;
|-&lt;br /&gt;
| page || Integer || The current page number.&lt;br /&gt;
|-&lt;br /&gt;
| page_count || Integer || The total number of pages returned.&lt;br /&gt;
|-&lt;br /&gt;
| page_size || Integer || The number of results per page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| first || String(URL) || URL to the first page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|- &lt;br /&gt;
| prev || String(URL) || URL to the previous page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|-&lt;br /&gt;
| next || String(URL) || URL to the next page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|-&lt;br /&gt;
| last || String(URL) || URL to the last page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Result Entry ===&lt;br /&gt;
&lt;br /&gt;
Fields returned by the api/mods endpoint are marked with a check (✓) in the &amp;quot;api/mods endpoint&amp;quot; column, those returned by the api/mods/{name} endpoint are marked with a check in the &amp;quot;Short&amp;quot; column and those returned by the api/mods/{name}/full endpoint are marked in the &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | api/mods endpoint !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Short !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Full !! Description&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || ✓ || ✓ || ✓&lt;br /&gt;
| Number of downloads.&lt;br /&gt;
|-&lt;br /&gt;
| latest_release || [[#Releases|Release]] || ✓ || ||&lt;br /&gt;
| The latest version of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| name || String || ✓ || ✓ || ✓&lt;br /&gt;
| The mod&#039;s machine-readable ID string.&lt;br /&gt;
|-&lt;br /&gt;
| owner || String || ✓ || ✓ || ✓&lt;br /&gt;
| The Factorio username of the mod&#039;s author.&lt;br /&gt;
|-&lt;br /&gt;
| releases || [[#Releases|Release]][] || || ✓ || ✓&lt;br /&gt;
| A list of different versions of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| summary || String || ✓ || ✓ || ✓&lt;br /&gt;
| A shorter mod description.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || ✓ || ✓ || ✓&lt;br /&gt;
| The mod&#039;s human-readable name.&lt;br /&gt;
|-&lt;br /&gt;
| category || [[#Tags|Tag]]? || ✓ || ✓ || ✓&lt;br /&gt;
| A single tag describing the mod. Warning: Seems to be absent sometimes. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
| changelog || String || || || ✓&lt;br /&gt;
| A string describing the recent changes to a mod&lt;br /&gt;
|- &lt;br /&gt;
| created_at || String(ISO 8601) || || || ✓&lt;br /&gt;
| ISO 6501 for when the mod was created.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || || || ✓&lt;br /&gt;
| A longer description of the mod, in text only format.&lt;br /&gt;
|-&lt;br /&gt;
| github_path || String || || || ✓&lt;br /&gt;
| A link to the mod&#039;s github project page, just prepend &amp;quot;github.com/&amp;quot;. Can be blank (&amp;quot;&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| homepage || String || || || ✓&lt;br /&gt;
| Usually a URL to the mod&#039;s main project page, but can be any string.&lt;br /&gt;
|-&lt;br /&gt;
| tag || [[#Tags|Tag]][] || || || ✓&lt;br /&gt;
| A list of tag objects that categorize the mod. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Releases ===&lt;br /&gt;
&lt;br /&gt;
Only difference here between the api/mods/{name} endpoint and the api/mods/{name}/full endpoint is that the full one includes an array of dependencies in the info_json object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| download_url || String &lt;br /&gt;
| Path to download for a mod. starts with &amp;quot;/download&amp;quot; and does not include a full url. See [[#Downloading Mods]]&lt;br /&gt;
|-&lt;br /&gt;
| file_name || String &lt;br /&gt;
| The file name of the release. Always seems to follow the pattern &amp;quot;{name}_{version}.zip&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| info_json || Object &lt;br /&gt;
| A copy of the mod&#039;s info.json file, only contains factorio_version in short version, also contains an array of dependencies in full version&lt;br /&gt;
|- &lt;br /&gt;
| released_at || String(ISO 8601) &lt;br /&gt;
| ISO 6501 for when the mod was released.&lt;br /&gt;
|-&lt;br /&gt;
| version || String &lt;br /&gt;
| The version string of this mod release. Used to determine dependencies. &lt;br /&gt;
|-&lt;br /&gt;
| sha1 || String &lt;br /&gt;
| The sha1 key for the file&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this tag.&lt;br /&gt;
|-&lt;br /&gt;
| name || String || An all lower-case string used to identify this tag internally.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || The tag&#039;s human-readable tag name.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || A short description for the tag.&lt;br /&gt;
|-&lt;br /&gt;
| type || String || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Currently, there are only a fixed number of tags available, these include:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! id !! type !! name !! title !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || t || general || General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
| 2 || t || non-game-changing || Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, ... such things.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || t || helper-mods || Helper Mods || These mods are not game-changing, but enhance the gameplay by helping you with useful functions. Mods like showing the current game-time, keep track over your resources, rail-laying...&lt;br /&gt;
|-&lt;br /&gt;
| 6 || t || big-mods || Big Mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
| 12 || t || transportation || Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
| 13 || t || logistics || Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
| 14 || t || utility || Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || t || balancing || Balancing || Makes the game much more fair&lt;br /&gt;
|-&lt;br /&gt;
| 17 || t || enemies || Enemies || Adds more enemies for more challange&lt;br /&gt;
|-&lt;br /&gt;
| 16 || t || weapons || Weapons || Adds more weapons to annihilate the enemy&lt;br /&gt;
|-&lt;br /&gt;
| 18 || t || armor || Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || t || oil || Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
| 20 || t || logistics-network || Logistics Network || Related to roboports and logistic robots&lt;br /&gt;
|- &lt;br /&gt;
| 21 || t || storage || Storage || Allows more ways to be able to store items&lt;br /&gt;
|-&lt;br /&gt;
| 22 || t || power-production || Power Production || Allows more ways to create mass amounts of energy&lt;br /&gt;
|-&lt;br /&gt;
| 23 || t || manufacture || Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
| 24 || t || blueprints || Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
| 25 || t || cheats || Cheats || Well, they let you cheat&lt;br /&gt;
|- &lt;br /&gt;
| 26 || t || defense || Defense || Mods that add the ability to protect your base more&lt;br /&gt;
|-&lt;br /&gt;
| 27 || t || mining || Mining || Mods that provide better or new ways of mining resources&lt;br /&gt;
|-&lt;br /&gt;
| 28 || t || info || Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
| 29 || t || trains || Trains || Related to trains&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| detail || String ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Downloading Mods ==&lt;br /&gt;
&lt;br /&gt;
You can get the full url by appending the download_url to mods.factorio.com, but if you&#039;re not authenticated, you will be redirected to mods.factorio.com/login. Logging in to that would give you access to the file. Fortunately, there&#039;s a better way to do this. Simply adding username and token parameters to the download url will prevent the redirecting and let you download the file immediately. The token can be acquired from a json file called &amp;quot;player-data.json&amp;quot;, located in the User Data directory (see [[Application_directory#User_data_directory]]). You can also get the token by using the [[Web_authentication_API | Web Authentication API]].&lt;br /&gt;
&lt;br /&gt;
Example usage:&lt;br /&gt;
https://mods.factorio.com/{download_url}?username={username}&amp;amp;token={token}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=188707</id>
		<title>Factorio HTTP API usage guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=188707"/>
		<updated>2022-03-18T12:24:10Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: /* APIs */  add mod upload api to public category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
Third party clients are welcome to use our HTTP APIs if they provide a benefit to players and creators in the Factorio community.&lt;br /&gt;
We ask developers to:&lt;br /&gt;
* ensure user privacy, e.g. by properly securing account secrets like passwords, tokens or API keys.&lt;br /&gt;
* respect server resources, e.g. by using exponential backoff in case of errors.&lt;br /&gt;
* communicate that their tool/library is in no way sanctioned by or associated with Wube Software.&lt;br /&gt;
We reserve the right to ban or rate limit abusive clients, IP addresses or accounts. Unless stated otherwise, our APIs should be considered internal.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* These APIs are only supported for use with the official Factorio game clients or websites.&lt;br /&gt;
* Up-to-date documentation is not guaranteed.&lt;br /&gt;
* We strive to support very old Factorio releases, so these APIs won&#039;t change much most of the time.&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* These APIs are intended to support developers building integrations with the official Factorio game clients or websites.&lt;br /&gt;
* Documentation will be kept up-to-date.&lt;br /&gt;
* Breaking changes to these APIs are communicated in a reasonable timeframe.&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* Short-lived, unstable APIs&lt;br /&gt;
* For testing new features with the community&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* [[Download API]]&lt;br /&gt;
* [[Matchmaking API]]&lt;br /&gt;
* [[Mod portal API]]&lt;br /&gt;
* [[Web authentication API]]&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* [[Mod upload API]]&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_upload_API&amp;diff=188706</id>
		<title>Mod upload API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_upload_API&amp;diff=188706"/>
		<updated>2022-03-18T12:23:00Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: Add upload API documentation from forums&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Public|Public API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The mod upload API is used to add new releases to mods on the Factorio mod portal. It requires an API key with the &amp;lt;code&amp;gt;ModPortal: Upload Mods&amp;lt;/code&amp;gt; usage, which can be created on https://factorio.com/profile. &lt;br /&gt;
&lt;br /&gt;
It accepts &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; HTTP requests and responds with JSON encoded objects.&lt;br /&gt;
&lt;br /&gt;
It was first announced on the Factorio forums. [https://forums.factorio.com/viewtopic.php?f=189&amp;amp;t=101769&amp;amp;p=562619#p562619]&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== init_upload ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || https://mods.factorio.com/api/v2/mods/releases/init_upload &lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Header&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Authorization|| &amp;lt;code&amp;gt;Bearer $APIKey&amp;lt;/code&amp;gt; || Authorization header with the APIKey and a &amp;quot;Bearer &amp;quot; prefix -&amp;gt; &amp;quot;Bearer $APIKey&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| mod || string || Name of the mod, for which a new release will be uploaded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| upload_url || string || URL the mod zip file should be uploaded to&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; requests. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== finish_upload ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| URL || &amp;lt;code&amp;gt;$upload_url&amp;lt;/code&amp;gt; URL returned by the init_upload endpoint&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Method || &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
HTTP Request Body&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| file || Mod zip file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JSON object response&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| success || bool || This attribute only appears on &amp;lt;strong&amp;gt;successful&amp;lt;/strong&amp;gt; uploads. It&#039;s set to true.&lt;br /&gt;
|-&lt;br /&gt;
| error || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads.&lt;br /&gt;
|-&lt;br /&gt;
| message || string || This attribute only appears on &amp;lt;strong&amp;gt;failed&amp;lt;/strong&amp;gt; uploads. Has details about the problem.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Possible API Error Responses ==&lt;br /&gt;
Possible values for the &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt; property of API responses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| InvalidApiKey || Missing or invalid API key for the current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| InvalidRequest || Invalid request.&lt;br /&gt;
|-&lt;br /&gt;
| InternalError || Internal error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| Forbidden || Insufficent permission for current endpoint&lt;br /&gt;
|-&lt;br /&gt;
| Unknown || Unknown error, please try again later.&lt;br /&gt;
|-&lt;br /&gt;
| InvalidModRelease || Invalid release data in info.json&lt;br /&gt;
|-&lt;br /&gt;
| InvalidModUpload || Invalid mod data in zipfile&lt;br /&gt;
|-&lt;br /&gt;
| UnknownMod || Mod does not exist in mod portal&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python Example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import requests&lt;br /&gt;
from os import getenv&lt;br /&gt;
&lt;br /&gt;
MOD_PORTAL_URL = &amp;quot;https://mods.factorio.com&amp;quot;&lt;br /&gt;
INIT_UPLOAD_URL = f&amp;quot;{MOD_PORTAL_URL}/api/v2/mods/releases/init_upload&amp;quot;&lt;br /&gt;
&lt;br /&gt;
apikey = getenv(&amp;quot;MOD_UPLOAD_API_KEY&amp;quot;)&lt;br /&gt;
modname = getenv(&amp;quot;MOD_UPLOAD_NAME&amp;quot;)&lt;br /&gt;
zipfilepath = getenv(&amp;quot;MOD_UPLOAD_FILE&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
request_body = data={&amp;quot;mod&amp;quot;:modname}&lt;br /&gt;
request_headers = {&amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {apikey}&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
response = requests.post(&lt;br /&gt;
	INIT_UPLOAD_URL,&lt;br /&gt;
	data=request_body,&lt;br /&gt;
	headers=request_headers)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:	&lt;br /&gt;
	print(f&amp;quot;init_upload failed: {response.text}&amp;quot;)&lt;br /&gt;
	sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
upload_url = response.json()[&amp;quot;upload_url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
with open(zipfilepath, &amp;quot;rb&amp;quot;) as f:	&lt;br /&gt;
	request_body = {&amp;quot;file&amp;quot;: f}	&lt;br /&gt;
	response = requests.post(upload_url, files=request_body)&lt;br /&gt;
&lt;br /&gt;
if not response.ok:	&lt;br /&gt;
	print(f&amp;quot;upload failed: {response.text}&amp;quot;)	&lt;br /&gt;
	sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;upload successful: {response.text}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Web_authentication_API&amp;diff=188588</id>
		<title>Web authentication API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Web_authentication_API&amp;diff=188588"/>
		<updated>2022-03-07T16:55:23Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: Update to api_version 4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;stub&amp;quot;&amp;gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [[Factorio_HTTP_API_usage_guidelines#Internal|Internal API]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Factorio&#039;s Web Authentication API endpoint gives you a token in exchange for your username and password, which is used by several other Factorio web API endpoints. The authentication endpoint is located at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://auth.factorio.com/api-login&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Authentication requires sending an HTTP POST request with these parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| username&lt;br /&gt;
| Required.&lt;br /&gt;
| Account username or e-mail.&lt;br /&gt;
|-&lt;br /&gt;
| password&lt;br /&gt;
| Required.&lt;br /&gt;
| Account password.&lt;br /&gt;
|- &lt;br /&gt;
| api_version&lt;br /&gt;
| (Technically) not required. API responses will be different than described on this page when not set to 4.&lt;br /&gt;
| Currently 4.&lt;br /&gt;
|-&lt;br /&gt;
| require_game_ownership&lt;br /&gt;
| Not required.&lt;br /&gt;
| If set to &#039;true&#039;, will fail authentication if the user account hasn&#039;t actually purchased Factorio.&lt;br /&gt;
|-&lt;br /&gt;
| email_authentication_code&lt;br /&gt;
| Not required.&lt;br /&gt;
| If a previous login failed with &amp;lt;code&amp;gt;email-authentication-required&amp;lt;/code&amp;gt;, email authentication can be completed by including the code sent to the user via mail.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This endpoint always returns JSON encoded data. If authentication was successful, it will return an HTTP status code of 200 with a JSON object:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| token&lt;br /&gt;
| Auth token is a hexadecimal encoded byte string&lt;br /&gt;
|-&lt;br /&gt;
| username&lt;br /&gt;
| The username of the logged in user. &lt;br /&gt;
&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
On non-200 status codes, the response can be JSON encoded and provide more details about the problem:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| error&lt;br /&gt;
| Error codes like &amp;lt;code&amp;gt;login-failed&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;email-authentication-required&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| message&lt;br /&gt;
| A more detailed error message that can be shown to the user &lt;br /&gt;
&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
Clients causing a lot of errors like &amp;lt;code&amp;gt;login-failed&amp;lt;/code&amp;gt; will be rate limited.&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=188548</id>
		<title>Factorio HTTP API usage guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=188548"/>
		<updated>2022-03-04T18:51:10Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: Link Experimental Upload API&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
Third party clients are welcome to use our HTTP APIs if they provide a benefit to players and creators in the Factorio community.&lt;br /&gt;
We ask developers to:&lt;br /&gt;
* ensure user privacy, e.g. by properly securing account secrets like passwords, tokens or API keys.&lt;br /&gt;
* respect server resources, e.g. by using exponential backoff in case of errors.&lt;br /&gt;
* communicate that their tool/library is in no way sanctioned by or associated with Wube Software.&lt;br /&gt;
We reserve the right to ban or rate limit abusive clients, IP addresses or accounts. Unless stated otherwise, our APIs should be considered internal.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* These APIs are only supported for use with the official Factorio game clients or websites.&lt;br /&gt;
* Up-to-date documentation is not guaranteed.&lt;br /&gt;
* We strive to support very old Factorio releases, so these APIs won&#039;t change much most of the time.&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* These APIs are intended to support developers building integrations with the official Factorio game clients or websites.&lt;br /&gt;
* Documentation will be kept up-to-date.&lt;br /&gt;
* Breaking changes to these APIs are communicated in a reasonable timeframe.&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* Short-lived, unstable APIs&lt;br /&gt;
* For testing new features with the community&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* [[Download API]]&lt;br /&gt;
* [[Matchmaking API]]&lt;br /&gt;
* [[Mod portal API]]&lt;br /&gt;
* [[Web authentication API]]&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
Stay tuned...&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* Experimental Mod Upload API [https://forums.factorio.com/viewtopic.php?f=189&amp;amp;t=101769&amp;amp;p=562619#p562619]&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=188547</id>
		<title>Factorio HTTP API usage guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=188547"/>
		<updated>2022-03-04T13:03:39Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: add experimental category, minor wording updates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
Third party clients are welcome to use our HTTP APIs if they provide a benefit to players and creators in the Factorio community.&lt;br /&gt;
We ask developers to:&lt;br /&gt;
* ensure user privacy, e.g. by properly securing account secrets like passwords, tokens or API keys.&lt;br /&gt;
* respect server resources, e.g. by using exponential backoff in case of errors.&lt;br /&gt;
* communicate that their tool/library is in no way sanctioned by or associated with Wube Software.&lt;br /&gt;
We reserve the right to ban or rate limit abusive clients, IP addresses or accounts. Unless stated otherwise, our APIs should be considered internal.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* These APIs are only supported for use with the official Factorio game clients or websites.&lt;br /&gt;
* Up-to-date documentation is not guaranteed.&lt;br /&gt;
* We strive to support very old Factorio releases, so these APIs won&#039;t change much most of the time.&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* These APIs are intended to support developers building integrations with the official Factorio game clients or websites.&lt;br /&gt;
* Documentation will be kept up-to-date.&lt;br /&gt;
* Breaking changes to these APIs are communicated in a reasonable timeframe.&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
* Short-lived, unstable APIs&lt;br /&gt;
* For testing new features with the community&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* [[Download API]]&lt;br /&gt;
* [[Matchmaking API]]&lt;br /&gt;
* [[Mod portal API]]&lt;br /&gt;
* [[Web authentication API]]&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
Stay tuned...&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
Stay tuned...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=187908</id>
		<title>Factorio HTTP API usage guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=187908"/>
		<updated>2022-01-21T09:47:52Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: add wiki category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
Third party clients are welcome to use our HTTP APIs if they provide a benefit to players and creators in the Factorio community.&lt;br /&gt;
We ask developers to:&lt;br /&gt;
* ensure user privacy, e.g. by properly securing account secrets like passwords or tokens.&lt;br /&gt;
* respect server resources, e.g. by using exponential backoff in case of errors.&lt;br /&gt;
* communicate that their tool/library is in no way sanctioned by Wube Software.&lt;br /&gt;
We reserve the right to ban or rate limit abusive clients, IP addresses or accounts. Unless stated otherwise, our APIs should be considered internal.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* These APIs are only supported for use with the official Factorio game clients or websites.&lt;br /&gt;
* Up-to-date documentation is not guaranteed.&lt;br /&gt;
* We strive to support very old Factorio releases, so these APIs won&#039;t change much most of the time.&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* These APIs are intended to support developers building integrations with the official Factorio game clients or websites.&lt;br /&gt;
* Documentation will be kept up-to-date.&lt;br /&gt;
* Breaking changes to these APIs are communicated in a reasonable timeframe.&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* https://wiki.factorio.com/Download_API&lt;br /&gt;
* https://wiki.factorio.com/Matchmaking_API&lt;br /&gt;
* https://wiki.factorio.com/Mod_portal_API&lt;br /&gt;
* https://wiki.factorio.com/Web_authentication_API&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
Stay tuned...&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Web_authentication_API&amp;diff=187907</id>
		<title>Web authentication API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Web_authentication_API&amp;diff=187907"/>
		<updated>2022-01-21T09:46:31Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: add category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&#039;&#039;&#039;Category:&#039;&#039;&#039; [https://wiki.factorio.com/Factorio_HTTP_API_usage_guidelines#Internal internal]&lt;br /&gt;
&lt;br /&gt;
Factorio&#039;s Web Authentication API endpoint gives you a token in exchange for your username and password, which is used by several other Factorio web API endpoints. The authentication endpoint is located at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://auth.factorio.com/api-login&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Authentication requires sending an HTTP POST request with these parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| username&lt;br /&gt;
| Required.&lt;br /&gt;
| Account username.&lt;br /&gt;
|-&lt;br /&gt;
| password&lt;br /&gt;
| Required.&lt;br /&gt;
| Account password.&lt;br /&gt;
|- &lt;br /&gt;
| api_version&lt;br /&gt;
| Not required.&lt;br /&gt;
| Currently 2.&lt;br /&gt;
|-&lt;br /&gt;
| require_game_ownership&lt;br /&gt;
| Not required.&lt;br /&gt;
| If set to &#039;true&#039;, will fail authentication if the user account hasn&#039;t actually purchased Factorio.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This endpoint always returns JSON encoded data. If authentication was successful, it will return an HTTP status code of 200 with a JSON list containing a single item: the auth token. The auth token seems to always be a hexadecimal encoded 15-byte string of random bytes.&lt;br /&gt;
&lt;br /&gt;
TODO: exceptions and stuffs.&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=187906</id>
		<title>Mod portal API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Mod_portal_API&amp;diff=187906"/>
		<updated>2022-01-21T09:46:15Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: add category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [https://wiki.factorio.com/Factorio_HTTP_API_usage_guidelines#Internal internal]&lt;br /&gt;
&lt;br /&gt;
The Mod Portal API is used to both browse and download all mods available on the [https://mods.factorio.com/ official Factorio mod portal]. Using the API does not require any kind of authentication or account information and can be viewed simply by following the URLs below in any web browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More detailed information about a particular mod can be obtained by retrieving the following URL, where {name} is the mod&#039;s name field in the result object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get even more information about a mod, you can use the following URL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://mods.factorio.com/api/mods/{name}/full&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== /api/mods ===&lt;br /&gt;
&lt;br /&gt;
GET Parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Values !! Description&lt;br /&gt;
|-&lt;br /&gt;
| page ||{an integer}||Page number you would like to show. Makes it so you can see a certain part of the list without getting detail on all&lt;br /&gt;
|-&lt;br /&gt;
| page_size ||{an integer or &#039;max&#039;}||The amount of results to show in your search&lt;br /&gt;
|-&lt;br /&gt;
| namelist || {array of strings} || Return only mods that match the given names. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Returns [[#Mod List Response]]&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name} ===&lt;br /&gt;
&lt;br /&gt;
Return short information of a specific mod.&lt;br /&gt;
&lt;br /&gt;
See [[#Result Entry]], &amp;quot;Short&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
=== /api/mods/{mod_name}/full ===&lt;br /&gt;
&lt;br /&gt;
Returns more information of a mod.&lt;br /&gt;
&lt;br /&gt;
See [[#Result Entry]], &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
== JSON Object Types ==&lt;br /&gt;
&lt;br /&gt;
=== Mod List Response ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| pagination || [[#Pagination|Pagination]] || See [[#Pagination]]&lt;br /&gt;
|-&lt;br /&gt;
| results || [[#Result Entry|Result]][] || A list of mods, matching any filters you specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| count || Integer || Total number of mods that match your specified filters.&lt;br /&gt;
|-&lt;br /&gt;
| links || [[#Pagination_Links|Links]] || Utility links to mod portal api requests, preserving all filters and search queries.&lt;br /&gt;
|-&lt;br /&gt;
| page || Integer || The current page number.&lt;br /&gt;
|-&lt;br /&gt;
| page_count || Integer || The total number of pages returned.&lt;br /&gt;
|-&lt;br /&gt;
| page_size || Integer || The number of results per page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pagination Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| first || String(URL) || URL to the first page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|- &lt;br /&gt;
| prev || String(URL) || URL to the previous page of the results, or null if you&#039;re already on the first page.&lt;br /&gt;
|-&lt;br /&gt;
| next || String(URL) || URL to the next page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|-&lt;br /&gt;
| last || String(URL) || URL to the last page of the results, or null if you&#039;re already on the last page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Result Entry ===&lt;br /&gt;
&lt;br /&gt;
Fields returned by the api/mods endpoint are marked with a check (✓) in the &amp;quot;api/mods endpoint&amp;quot; column, those returned by the api/mods/{name} endpoint are marked with a check in the &amp;quot;Short&amp;quot; column and those returned by the api/mods/{name}/full endpoint are marked in the &amp;quot;Full&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | api/mods endpoint !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Short !!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:90%&#039; | Full !! Description&lt;br /&gt;
|-&lt;br /&gt;
| downloads_count || Integer || ✓ || ✓ || ✓&lt;br /&gt;
| Number of downloads.&lt;br /&gt;
|-&lt;br /&gt;
| latest_release || [[#Releases|Release]] || ✓ || ||&lt;br /&gt;
| The latest version of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| name || String || ✓ || ✓ || ✓&lt;br /&gt;
| The mod&#039;s machine-readable ID string.&lt;br /&gt;
|-&lt;br /&gt;
| owner || String || ✓ || ✓ || ✓&lt;br /&gt;
| The Factorio username of the mod&#039;s author.&lt;br /&gt;
|-&lt;br /&gt;
| releases || [[#Releases|Release]][] || || ✓ || ✓&lt;br /&gt;
| A list of different versions of the mod available for download. See [[#Releases]]&lt;br /&gt;
|-&lt;br /&gt;
| summary || String || ✓ || ✓ || ✓&lt;br /&gt;
| A shorter mod description.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || ✓ || ✓ || ✓&lt;br /&gt;
| The mod&#039;s human-readable name.&lt;br /&gt;
|-&lt;br /&gt;
| category || [[#Tags|Tag]]? || ✓ || ✓ || ✓&lt;br /&gt;
| A single tag describing the mod. Warning: Seems to be absent sometimes. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
| changelog || String || || || ✓&lt;br /&gt;
| A string describing the recent changes to a mod&lt;br /&gt;
|- &lt;br /&gt;
| created_at || String(ISO 8601) || || || ✓&lt;br /&gt;
| ISO 6501 for when the mod was created.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || || || ✓&lt;br /&gt;
| A longer description of the mod, in text only format.&lt;br /&gt;
|-&lt;br /&gt;
| github_path || String || || || ✓&lt;br /&gt;
| A link to the mod&#039;s github project page, just prepend &amp;quot;github.com/&amp;quot;. Can be blank (&amp;quot;&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| homepage || String || || || ✓&lt;br /&gt;
| Usually a URL to the mod&#039;s main project page, but can be any string.&lt;br /&gt;
|-&lt;br /&gt;
| tag || [[#Tags|Tag]][] || || || ✓&lt;br /&gt;
| A list of tag objects that categorize the mod. See [[#Tags]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Releases ===&lt;br /&gt;
&lt;br /&gt;
Only difference here between the api/mods/{name} endpoint and the api/mods/{name}/full endpoint is that the full one includes an array of dependencies in the info_json object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| download_url || String &lt;br /&gt;
| Path to download for a mod. starts with &amp;quot;/download&amp;quot; and does not include a full url. See [[#Downloading Mods]]&lt;br /&gt;
|-&lt;br /&gt;
| file_name || String &lt;br /&gt;
| The file name of the release. Always seems to follow the pattern &amp;quot;{name}_{version}.zip&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| info_json || Object &lt;br /&gt;
| A copy of the mod&#039;s info.json file, only contains factorio_version in short version, also contains an array of dependencies in full version&lt;br /&gt;
|- &lt;br /&gt;
| released_at || String(ISO 8601) &lt;br /&gt;
| ISO 6501 for when the mod was released.&lt;br /&gt;
|-&lt;br /&gt;
| version || String &lt;br /&gt;
| The version string of this mod release. Used to determine dependencies. &lt;br /&gt;
|-&lt;br /&gt;
| sha1 || String &lt;br /&gt;
| The sha1 key for the file&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Integer || A numerical ID unique to this tag.&lt;br /&gt;
|-&lt;br /&gt;
| name || String || An all lower-case string used to identify this tag internally.&lt;br /&gt;
|-&lt;br /&gt;
| title || String || The tag&#039;s human-readable tag name.&lt;br /&gt;
|-&lt;br /&gt;
| description || String || A short description for the tag.&lt;br /&gt;
|-&lt;br /&gt;
| type || String || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Currently, there are only a fixed number of tags available, these include:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! id !! type !! name !! title !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || t || general || General || Mods that cannot be sorted into other categories&lt;br /&gt;
|-&lt;br /&gt;
| 2 || t || non-game-changing || Non-Game-Changing || Changes only look&amp;amp;feel. New graphics, new sounds, ... such things.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || t || helper-mods || Helper Mods || These mods are not game-changing, but enhance the gameplay by helping you with useful functions. Mods like showing the current game-time, keep track over your resources, rail-laying...&lt;br /&gt;
|-&lt;br /&gt;
| 6 || t || big-mods || Big Mods || Too big and/or changes too much of the game to be fit anywhere else&lt;br /&gt;
|-&lt;br /&gt;
| 12 || t || transportation || Transportation || Player transport&lt;br /&gt;
|-&lt;br /&gt;
| 13 || t || logistics || Logistics || Transport of materials&lt;br /&gt;
|-&lt;br /&gt;
| 14 || t || utility || Utility || Helps with certain things the player is doing.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || t || balancing || Balancing || Makes the game much more fair&lt;br /&gt;
|-&lt;br /&gt;
| 17 || t || enemies || Enemies || Adds more enemies for more challange&lt;br /&gt;
|-&lt;br /&gt;
| 16 || t || weapons || Weapons || Adds more weapons to annihilate the enemy&lt;br /&gt;
|-&lt;br /&gt;
| 18 || t || armor || Armor || Armors or armor equipment related.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || t || oil || Oil || Things related to oil related manufacture&lt;br /&gt;
|-&lt;br /&gt;
| 20 || t || logistics-network || Logistics Network || Related to roboports and logistic robots&lt;br /&gt;
|- &lt;br /&gt;
| 21 || t || storage || Storage || Allows more ways to be able to store items&lt;br /&gt;
|-&lt;br /&gt;
| 22 || t || power-production || Power Production || Allows more ways to create mass amounts of energy&lt;br /&gt;
|-&lt;br /&gt;
| 23 || t || manufacture || Manufacture || Furnaces, assembling machines, production chains&lt;br /&gt;
|-&lt;br /&gt;
| 24 || t || blueprints || Blueprints || &lt;br /&gt;
|-&lt;br /&gt;
| 25 || t || cheats || Cheats || Well, they let you cheat&lt;br /&gt;
|- &lt;br /&gt;
| 26 || t || defense || Defense || Mods that add the ability to protect your base more&lt;br /&gt;
|-&lt;br /&gt;
| 27 || t || mining || Mining || Mods that provide better or new ways of mining resources&lt;br /&gt;
|-&lt;br /&gt;
| 28 || t || info || Info || Mods that provide additional information to the player&lt;br /&gt;
|-&lt;br /&gt;
| 29 || t || trains || Trains || Related to trains&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| detail || String ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Downloading Mods ==&lt;br /&gt;
&lt;br /&gt;
You can get the full url by appending the download_url to mods.factorio.com, but if you&#039;re not authenticated, you will be redirected to mods.factorio.com/login. Logging in to that would give you access to the file. Fortunately, there&#039;s a better way to do this. Simply adding username and token parameters to the download url will prevent the redirecting and let you download the file immediately. The token can be acquired from a json file called &amp;quot;player-data.json&amp;quot;, located in the User Data directory (see [[Application_directory#User_data_directory]]). You can also get the token by using the [[Web_authentication_API | Web Authentication API]].&lt;br /&gt;
&lt;br /&gt;
Example usage:&lt;br /&gt;
https://mods.factorio.com/{download_url}?username={username}&amp;amp;token={token}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Matchmaking_API&amp;diff=187905</id>
		<title>Matchmaking API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Matchmaking_API&amp;diff=187905"/>
		<updated>2022-01-21T09:45:56Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: add category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&#039;&#039;&#039;Category:&#039;&#039;&#039; [https://wiki.factorio.com/Factorio_HTTP_API_usage_guidelines#Internal internal]&lt;br /&gt;
&lt;br /&gt;
The matchmaking API allows Factorio servers to advertise themselves, and for players to browse open game servers. The matchmaking server currently uses [https://www.heroku.com/ Heroku] and [http://gunicorn.org/ Green Unicorn] software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;API root: https://multiplayer.factorio.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some of the API endpoints require the use of an authentication token, which is obtained through the [[Web Authentication API]]. It is sent as the HTTP parameter named &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt; and encoded using hexadecimal. All requests are encoded as JSON objects.&lt;br /&gt;
&lt;br /&gt;
Work in progress! I&#039;m just going to jot down some random notes in the mean time :P&lt;br /&gt;
&lt;br /&gt;
https://multiplayer.factorio.com/get-games&lt;br /&gt;
&lt;br /&gt;
https://multiplayer.factorio.com/get-game-details/ Unauthenticated&lt;br /&gt;
&lt;br /&gt;
https://multiplayer.factorio.com/create-game&lt;br /&gt;
&lt;br /&gt;
https://multiplayer.factorio.com/post-game-heartbeat/&lt;br /&gt;
&lt;br /&gt;
https://multiplayer.factorio.com/remove-game/&lt;br /&gt;
&lt;br /&gt;
== Object Types ==&lt;br /&gt;
&lt;br /&gt;
=== Server Description Object ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Key&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Type&lt;br /&gt;
!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:80.9%&#039; | get-games&lt;br /&gt;
!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:80.9%&#039; | get-game-details&lt;br /&gt;
!+ style=&#039;writing-mode:vertical-lr;vertical-align:bottom;font-size:80.9%&#039; | create-game&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| application_version&lt;br /&gt;
| object&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| See [[#Application Version|application version]] below.&lt;br /&gt;
|-&lt;br /&gt;
| description&lt;br /&gt;
| string&lt;br /&gt;
| &lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| The server&#039;s description.&lt;br /&gt;
|-&lt;br /&gt;
| game_id&lt;br /&gt;
| integer&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| A unique id generated by the matchmaking server to identify a server for other API endpoints. &lt;br /&gt;
|-&lt;br /&gt;
| game_secret&lt;br /&gt;
| string&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| ✓&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| game_time_elapsed&lt;br /&gt;
| string(integer)&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| Number of in-game minutes the loaded map has elapsed.&lt;br /&gt;
|-&lt;br /&gt;
| has_password&lt;br /&gt;
| string(boolean)&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| &amp;quot;true&amp;quot; if a password is required to join the server.&lt;br /&gt;
|-&lt;br /&gt;
| host_address&lt;br /&gt;
| string(ip:port)&lt;br /&gt;
| &lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| The IP address and port number the game server is hosted on.&lt;br /&gt;
|-&lt;br /&gt;
| last_heartbeat&lt;br /&gt;
| number&lt;br /&gt;
| &lt;br /&gt;
| ✓&lt;br /&gt;
| &lt;br /&gt;
| The Unix timestamp of when the game server was last heard from.&lt;br /&gt;
|-&lt;br /&gt;
| max_players&lt;br /&gt;
| string(integer)&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| Maximum number of players allowed to connect at once. 0 = unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| mod_count&lt;br /&gt;
| integer&lt;br /&gt;
| ✓&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Number of mods installed on the server.&lt;br /&gt;
|-&lt;br /&gt;
| mods&lt;br /&gt;
| object[]&lt;br /&gt;
| &lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| List of [[#Mod Description|mods and their versions]] installed on the server.&lt;br /&gt;
|-&lt;br /&gt;
| mods_crc&lt;br /&gt;
| integer&lt;br /&gt;
| &lt;br /&gt;
| ✓&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| string&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| Server&#039;s name.&lt;br /&gt;
|-&lt;br /&gt;
| players&lt;br /&gt;
| string[]&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| &lt;br /&gt;
| List of player&#039;s usernames connected to the server.&lt;br /&gt;
|-&lt;br /&gt;
| require_user_verification&lt;br /&gt;
| string(boolean)&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| &amp;quot;true&amp;quot; if the server requires the user to be logged in to join.&lt;br /&gt;
|-&lt;br /&gt;
| server_id&lt;br /&gt;
| string&lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| tags&lt;br /&gt;
| string[]&lt;br /&gt;
| &lt;br /&gt;
| ✓&lt;br /&gt;
| ✓&lt;br /&gt;
| List of server tags.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Application Version ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| build_mode&lt;br /&gt;
| string&lt;br /&gt;
| &amp;quot;alpha&amp;quot;, &amp;quot;headless&amp;quot;, or &amp;quot;steam&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| build_version&lt;br /&gt;
| string(integer)&lt;br /&gt;
| The build version associated with the game version.&lt;br /&gt;
|-&lt;br /&gt;
| game_version&lt;br /&gt;
| string&lt;br /&gt;
| Game version running on the server, e.g. &amp;quot;0.14.21&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| platform&lt;br /&gt;
| string&lt;br /&gt;
| OS the server is running on: &amp;quot;linux64&amp;quot;, &amp;quot;mac&amp;quot;, or &amp;quot;win64&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mod Description ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| string&lt;br /&gt;
| ID of the mod.&lt;br /&gt;
|-&lt;br /&gt;
| version&lt;br /&gt;
| string&lt;br /&gt;
| Version string of the mod.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Error Message ===&lt;br /&gt;
&lt;br /&gt;
This object is returned whenever there&#039;s been an error with your request. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| message&lt;br /&gt;
| string&lt;br /&gt;
| A short description of the error.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== get-games ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET https://multiplayer.factorio.com/get-games&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the available Factorio game servers as a list of [[#Server Description Object|Server Description Objects]], but only with the object keys marked as available in the &amp;quot;get-games&amp;quot; column. Requires two GET parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| username || The factorio username associated with the auth token.&lt;br /&gt;
|-&lt;br /&gt;
| token || A valid auth token, as obtained using the [[Web Authentication API]].&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exceptions&#039;&#039;&#039;&lt;br /&gt;
* &amp;quot;Missing username.&amp;quot;&lt;br /&gt;
* &amp;quot;User not found.&amp;quot;&lt;br /&gt;
* &amp;quot;Token doesn&#039;t match.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== get-game-details ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET https://multiplayer.factorio.com/get-game-details/&amp;lt;nowiki&amp;gt;{game_id}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns more details about the server, where {game_id} is the server&#039;s game_id as seen in the response from the get-games endpoint. This endpoint doesn&#039;t require an authentication token.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Download_API&amp;diff=187904</id>
		<title>Download API</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Download_API&amp;diff=187904"/>
		<updated>2022-01-21T09:45:27Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: add category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Category:&#039;&#039;&#039; [https://wiki.factorio.com/Factorio_HTTP_API_usage_guidelines#Internal internal]&lt;br /&gt;
&lt;br /&gt;
This API allows you to download official releases of stand-alone Factorio from the Factorio servers. It&#039;s not so much of an API as it is web scraping, but it&#039;s documented here for completeness. Please update this page if you utilize it and the information becomes outdated. Also note that&#039;s there&#039;s a separate, (semi)official API for upgrading between releases, which should be used when possible to lighten the load on the Factorio servers. (I&#039;ll document that later, promise!)&lt;br /&gt;
&lt;br /&gt;
== Authenticating ==&lt;br /&gt;
&lt;br /&gt;
Downloading Factorio requires an authenticated session with the web server, which is different than the typical API authentication mechanism. Authentication uses the HTML endpoint at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/login&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login in procedure:&lt;br /&gt;
&lt;br /&gt;
# Create an HTTP session and send a GET request. You&#039;ll get some HTML in return.&amp;lt;br&amp;gt;There&#039;s a [[:Wikipedia:Cross-site_request_forgery#Synchronizer_token_pattern|CSRF token]] you&#039;ll need to grab which can be found using one of the following selectors:&lt;br /&gt;
#* CSS1: &amp;lt;code&amp;gt;input[name=csrf_token]&amp;lt;/code&amp;gt; (and then take the &amp;quot;value&amp;quot; attribute).&lt;br /&gt;
#* XPATH1: &amp;lt;code&amp;gt;//input[@name=&amp;quot;csrf_token&amp;quot;]/@value&amp;lt;/code&amp;gt;&lt;br /&gt;
# Then send a POST request with the following parameters:&lt;br /&gt;
#* &amp;lt;code&amp;gt;csrf_token&amp;lt;/code&amp;gt;: the CSRF token you grabbed earlier.&lt;br /&gt;
#* &amp;lt;code&amp;gt;username_or_email&amp;lt;/code&amp;gt;: your username or email address.&lt;br /&gt;
#* &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;: your password.&lt;br /&gt;
&lt;br /&gt;
== Downloading ==&lt;br /&gt;
&lt;br /&gt;
Download Factorio releases at&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/get-download/{version}/{build}/{distro}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where {version} is the version string of the release you wish to grab - e.g. &amp;quot;0.15.31&amp;quot;. Use &amp;quot;latest&amp;quot; instead to default to the latest version for that build.&lt;br /&gt;
* {build} is the release build, which currently comprises of:&lt;br /&gt;
** &amp;lt;code&amp;gt;alpha&amp;lt;/code&amp;gt; - the current standard full-featured build.&lt;br /&gt;
** &amp;lt;code&amp;gt;demo&amp;lt;/code&amp;gt; - the free, publicly accessible demo versions.&lt;br /&gt;
** &amp;lt;code&amp;gt;headless&amp;lt;/code&amp;gt; - for running servers on machines without graphical interface. &lt;br /&gt;
* and {distro} is the os / type of release you wish to download, currently:&lt;br /&gt;
** &amp;lt;code&amp;gt;win64&amp;lt;/code&amp;gt; - EXE installer for 64 bit Windows.&lt;br /&gt;
** &amp;lt;code&amp;gt;win64-manual&amp;lt;/code&amp;gt; - ZIP package for 64 bit Windows.&lt;br /&gt;
** &amp;lt;code&amp;gt;win32&amp;lt;/code&amp;gt; - EXE installer for 32 bit Windows. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;win32-manual&amp;lt;/code&amp;gt; - ZIP package for 32 bit Windows. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;osx&amp;lt;/code&amp;gt; - DMG package for 64 bit Mac OS.&lt;br /&gt;
** &amp;lt;code&amp;gt;linux64&amp;lt;/code&amp;gt; - tar.gz or tar.xz package for 64 bit Linux.&lt;br /&gt;
** &amp;lt;code&amp;gt;linux32&amp;lt;/code&amp;gt; - tar.gz or tar.xz package for 32 bit Linux. &#039;&#039;No longer supported.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Factorio servers will correctly respond with a 404 if the requested download isn&#039;t available. Experimental builds are taken down quickly after they become obsolete, so it&#039;s best to check what versions are available before hand (documented below).&lt;br /&gt;
&lt;br /&gt;
Note: Windows 32 bit and 64 bit installers are [https://en.wikipedia.org/wiki/Inno_Setup Inno Setup] formatted packages (I&#039;ll document that somewhere someday).&lt;br /&gt;
&lt;br /&gt;
== Version Listings ==&lt;br /&gt;
There is an API endpoint to find the latest version number at &amp;lt;code&amp;gt;https://factorio.com/api/latest-releases&amp;lt;/code&amp;gt;. This can be polled to automatically detect when a new update was released.&lt;br /&gt;
&lt;br /&gt;
Due to changes in the Factorio website, all Factorio versions are now available on the HTML page at this location:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download/archive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: This endpoint require an authenticated session as mentioned above.&lt;br /&gt;
&lt;br /&gt;
You could the grab all the informations you need by parsing the HTML using selectors but I would recommend only searching for the pattern &amp;lt;code&amp;gt;href=&amp;quot;/get-download/*&amp;quot;&amp;lt;/code&amp;gt; and then parse the relative link according to the &amp;lt;code&amp;gt;/get-download/{version}/{build}/{distro}&amp;lt;/code&amp;gt; structure described in the section above. The second method has a clear advantage of reliability through potential HTML structure changes and simplicity.&lt;br /&gt;
&lt;br /&gt;
It is also better to rely on the &amp;lt;code&amp;gt;https://factorio.com/api/latest-releases&amp;lt;/code&amp;gt; endpoint and version number comparisons to distinguish between stable and experimental versions than to extract that information from the download HTML page with selectors.&lt;br /&gt;
&lt;br /&gt;
The previous endpoints for experimental and headless releases &amp;lt;code&amp;gt;https://www.factorio.com/download/experimental&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;https://www.factorio.com/download-headless&amp;lt;/code&amp;gt; now both redirect to this page containing only the latest releases:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.factorio.com/download&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The selectors used to retrieve version numbers and build combinations are presented below, but they are probably obsolete. I will check them later and update this section accordingly.&lt;br /&gt;
* CSS1: &amp;lt;code&amp;gt;h3&amp;lt;/code&amp;gt;&lt;br /&gt;
* XPATH1: &amp;lt;code&amp;gt;//h3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A list of available update packages is provided at &amp;lt;code&amp;gt;https://updater.factorio.com/get-available-versions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Languages}}[[Category:Technical]]&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=187903</id>
		<title>Factorio HTTP API usage guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Factorio_HTTP_API_usage_guidelines&amp;diff=187903"/>
		<updated>2022-01-21T09:43:26Z</updated>

		<summary type="html">&lt;p&gt;Vinzenz: inital guidelines&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
Third party clients are welcome to use our HTTP APIs if they provide a benefit to players and creators in the Factorio community.&lt;br /&gt;
We ask developers to:&lt;br /&gt;
* ensure user privacy, e.g. by properly securing account secrets like passwords or tokens.&lt;br /&gt;
* respect server resources, e.g. by using exponential backoff in case of errors.&lt;br /&gt;
* communicate that their tool/library is in no way sanctioned by Wube Software.&lt;br /&gt;
We reserve the right to ban or rate limit abusive clients, IP addresses or accounts. Unless stated otherwise, our APIs should be considered internal.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* These APIs are only supported for use with the official Factorio game clients or websites.&lt;br /&gt;
* Up-to-date documentation is not guaranteed.&lt;br /&gt;
* We strive to support very old Factorio releases, so these APIs won&#039;t change much most of the time.&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
* These APIs are intended to support developers building integrations with the official Factorio game clients or websites.&lt;br /&gt;
* Documentation will be kept up-to-date.&lt;br /&gt;
* Breaking changes to these APIs are communicated in a reasonable timeframe.&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
=== Internal ===&lt;br /&gt;
* https://wiki.factorio.com/Download_API&lt;br /&gt;
* https://wiki.factorio.com/Matchmaking_API&lt;br /&gt;
* https://wiki.factorio.com/Mod_portal_API&lt;br /&gt;
* https://wiki.factorio.com/Web_authentication_API&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
Stay tuned...&lt;/div&gt;</summary>
		<author><name>Vinzenz</name></author>
	</entry>
</feed>