diff --git a/doc/odapi/.gitignore b/doc/odapi/.gitignore
new file mode 100644
index 0000000..e477c8f
--- /dev/null
+++ b/doc/odapi/.gitignore
@@ -0,0 +1,3 @@
+*.aux
+*.log
+*.out
\ No newline at end of file
diff --git a/doc/odapi/api_table.pdf b/doc/odapi/api_table.pdf
new file mode 100644
index 0000000..30dfbd3
Binary files /dev/null and b/doc/odapi/api_table.pdf differ
diff --git a/doc/odapi/api_table.tex b/doc/odapi/api_table.tex
new file mode 100644
index 0000000..586053f
--- /dev/null
+++ b/doc/odapi/api_table.tex
@@ -0,0 +1,121 @@
+\documentclass{article}
+
+\usepackage[left=1cm, right=1cm]{geometry} % reduce page margins
+
+\usepackage{amssymb}
+\usepackage{booktabs}
+\usepackage[normalem]{ulem}
+\usepackage[utf8]{inputenc}
+\usepackage{hyperref}
+\usepackage{graphicx}
+\usepackage{tikz}
+\usepackage{color,listings}
+\usepackage{awesomebox}
+
+\newcommand{\specialcell}[2][c]{%
+ \begin{tabular}[#1]{@{}l@{}}#2\end{tabular}}
+
+\def\ck{\checkmark}
+
+\begin{document}
+
+\centering
+\begin{scriptsize}
+\begin{tabular}{|l|c|c|c|c|c|l|}
+ \hline
+ & \multicolumn{5}{c|}{Availability in Context} & \\
+ \hline
+ & \multicolumn{2}{c|}{ \specialcell{Meta-Model \\ Constraint}} & \multicolumn{2}{c|}{ \specialcell{Model Trans- \\ formation Rule} } & & \\
+
+ \hline
+ & \specialcell{ \textbf{Local} }
+ & \specialcell{ \textbf{Global} }
+ & \specialcell{ \textbf{NAC} \\ \textbf{LHS} }
+ & \textbf{RHS}
+ & \specialcell{ \textbf{OD-} \\ \textbf{API} }
+ & \textbf{Meaning} \\
+ \hline
+ \hline
+ \multicolumn{7}{|l|}{\textit{Querying}} \\
+ \hline
+ \texttt{this :obj} & \ck & & \ck & \ck & & Current object or link \\
+ \hline
+ \texttt{get\_name(:obj) :str} & \ck & \ck & \ck & \ck & \ck & Get name of object or link \\
+ \hline
+ \texttt{get(name:str) :obj} & \ck & \ck & \ck & \ck & \ck & Get object or link by name (inverse of \texttt{get\_name}) \\
+ \hline
+ \texttt{get\_type(:obj) :obj} & \ck & \ck & \ck & \ck & \ck & {Get type of object or link} \\
+ \hline
+ \texttt{get\_type\_name(:obj) :str} & \ck & \ck & \ck & \ck & \ck & {Same as \texttt{get\_name(get\_type(...))}} \\
+ \hline
+ \specialcell{
+ \texttt{is\_instance(:obj, type\_name:str}
+ \\ \texttt{ [,include\_subtypes:bool=True]) :bool}
+ } & \ck & \ck & \ck & \ck & \ck & \specialcell{Is object instance of given type\\(or subtype thereof)?} \\
+ \hline
+
+ \texttt{get\_value(:obj) :int|str|bool} & \ck & \ck & \ck & \ck & \ck & \specialcell{Get value (only works on Integer,\\String, Boolean objects)} \\
+ \hline
+ \texttt{get\_target(:link) :obj} & \ck & \ck & \ck & \ck & \ck & {Get target of link} \\
+ \hline
+ \texttt{get\_source(:link) :obj} & \ck & \ck & \ck & \ck & \ck & {Get source of link} \\
+ \hline
+ \texttt{get\_slot(:obj, attr\_name:str) :link} & \ck & \ck & \ck & \ck & \ck & {Get slot-link (link connecting object to a value)} \\
+ \hline
+ \specialcell{
+ \texttt{get\_slot\_value(:obj,}
+ \\ \texttt{attr\_name:str) :int|str|bool}
+ } & \ck & \ck & \ck & \ck & \ck & {Same as \texttt{get\_value(get\_slot(...))})} \\
+ \hline
+
+ \specialcell{
+ \texttt{get\_all\_instances(type\_name:str}
+ \\ \texttt{ [,include\_subtypes:bool=True]}
+ \\ \texttt{) :list<(str, obj)>}
+ } & \ck & \ck & \ck & \ck & \ck & \specialcell{Get list of tuples (name, object) \\ of given type (and its subtypes).} \\
+ \hline
+ \specialcell{
+ \texttt{get\_outgoing(:obj,}
+ \\ \texttt{ assoc\_name:str) :list}
+ } & \ck & \ck & \ck & \ck & \ck & {Get outgoing links of given type} \\
+ \hline
+ \specialcell{
+ \texttt{get\_incoming(:obj,}
+ \\ \texttt{ assoc\_name:str) :list}
+ } & \ck & \ck & \ck & \ck & \ck & {Get incoming links of given type} \\
+ \hline
+ \texttt{has\_slot(:obj, attr\_name:str) :bool} & \ck & \ck & \ck & \ck & \ck & {Does object have given slot?} \\
+ \hline
+ \texttt{matched(label:str) :obj} & & & \ck & \ck & & \specialcell{Get matched object by its label \\ (the name of the object in the pattern)} \\
+
+ \hline
+ \hline
+ \multicolumn{7}{|l|}{\textit{Modifying}} \\
+ \hline
+ \texttt{delete(:obj)} & & & & \ck & \ck & {Delete object or link} \\
+ \hline
+
+ \specialcell{
+ \texttt{set\_slot\_value(:obj, attr\_name:str,}
+ \\ \texttt{ val:int|str|bool)}
+ } & & & & \ck & \ck & \specialcell{Set value of slot.
+ \\ Creates slot if it doesn't exist yet.} \\
+ \hline
+
+ \specialcell{
+ \texttt{create\_link(link\_name:str|None,} \\
+ \texttt{ assoc\_name:str, src:obj, tgt:obj) :link}
+ } & & & & \ck & \ck & \specialcell{Create link (typed by given association). \\
+ If \texttt{link\_name} is None, name is auto-generated.} \\
+ \hline
+ \specialcell{
+ \texttt{create\_object(object\_name:str|None,} \\
+ \texttt{ class\_name:str) :obj}
+ } & & & & \ck & \ck & \specialcell{Create object (typed by given class). \\
+ If \texttt{object\_name} is None, name is auto-generated.} \\
+ \hline
+ % \texttt{print(*args)} & \multicolumn{2}{c|}{Python's print function (useful for debugging)} & no, use the real print() \\
+\end{tabular}
+\end{scriptsize}
+
+\end{document}
\ No newline at end of file