Table of Content

The API

This is the version 2 of the API.

Some introduction

Before getting into the hard definitions, here are some words to help you understand the rest better.

The basic idea is: each linkode can have several nodes, it's a tree with only one root. The initial version of a linkode is created without specifying an id, and it will be the root. Subsequent versions will be children of already created nodes; all share the same root id.

To create a new linkode

- type: POST
- url: /api/2/linkode/
- data:
    content: the content of the linkode (Unicode!)
    text_type: the type of the content (plain text, Python, diff, C, etc.) [optional]
    read_only: set to "true" if you want the linkode to be read only. [optional] (default: false)
- returns:
    linkode_id: the unique id of the new node
    linkode_url: the URL to access that node
    root_id: the id of the root of all the structure (as in this case a brand new linkode was created, it matches the node id)
    root_url: the URL to access the linkode
  
>>> import requests
>>> data = {'content': 'The content of a Python script', 'text_type': 'python'}
>>> response = requests.post("https://linkode.org/api/2/linkode", json=data)
>>> response.status_code
201
>>> response.json()
{'linkode_id': '7bxvJqtvFIggJnyNXba1K4',
 'linkode_url': '/api/2/linkode/7bxvJqtvFIggJnyNXba1K4',
 'root_id': '7bxvJqtvFIggJnyNXba1K4',
 'root_url': '/api/2/linkode/7bxvJqtvFIggJnyNXba1K4'}
$ curl -s -H 'Content-type: application/json' -d '
> {"content": "The content of a Python script", "text_type": "python"}' \
> "https://linkode.org/api/2/linkode"
{
  "linkode_id": "SrDotVY03btcJBxSAtINC6",
  "linkode_url": "https://linkode.org/api/2/linkode/SrDotVY03btcJBxSAtINC6",
  "root_id": "SrDotVY03btcJBxSAtINC6",
  "root_url": "https://linkode.org/api/2/linkode/SrDotVY03btcJBxSAtINC6"
}

To get here an example in your favorite programming language please open an issue.



To create a child of an existing linkode node

- type: POST
- url: /api/2/linkode/<parent_linkode_id>/
- data:
    content: the content of the new node (Unicode!)
    text_type: the type of the content (plain text, Python, diff, C, etc.) [optional]
    read_only: set to "true" if you want the linkode to be read only. [optional] (default: false)
- returns:
    linkode_id: the unique id of the new node
    linkode_url: the URL to access that node
    root_id: the id of the root of all the structure
    root_url: the URL to access the root linkode
  
>>> # a children of root
>>> update = {'content': 'new content', 'text_type': 'python'}
>>> response = requests.post("https://linkode.org/api/2/linkode/7bxvJqtvFIggJnyNXba1K4/", json=update)
>>> response.status_code
201
>>> response.json()
{'linkode_id': 'TRgCnj5fXrcEC66dALDxt7',
 'linkode_url': '/api/2/linkode/TRgCnj5fXrcEC66dALDxt7',
 'root_id': '7bxvJqtvFIggJnyNXba1K4',
 'root_url': '/api/2/linkode/7bxvJqtvFIggJnyNXba1K4'}
>>>
>>> # a children of the just created node
>>> update = {'content': 'even newer content', 'text_type': 'python'}
>>> response = requests.post("https://linkode.org/api/2/linkode/TRgCnj5fXrcEC66dALDxt7/", json=update)
>>> response.status_code
201
>>> response.json()
{'linkode_id': 'dkaj4P3pJrdpMZomSKuQb7',
 'linkode_url': '/api/2/linkode/dkaj4P3pJrdpMZomSKuQb7',
 'root_id': '7bxvJqtvFIggJnyNXba1K4',
 'root_url': '/api/2/linkode/7bxvJqtvFIggJnyNXba1K4'}
$ # a children of root
$ curl -s -H 'Content-type: application/json' -d '
> {"content": "new content", "text_type": "python"}' \
> "https://linkode.org/api/2/linkode/SrDotVY03btcJBxSAtINC6/"
{
  "linkode_id": "x1F110pkRqWclAhXVcqtD1",
  "linkode_url": "https://linkode.org/api/2/linkode/x1F110pkRqWclAhXVcqtD1",
  "root_id": "SrDotVY03btcJBxSAtINC6",
  "root_url": "https://linkode.org/api/2/linkode/SrDotVY03btcJBxSAtINC6"
}
$
$ # a children of the just created node
$ curl -s -H 'Content-type: application/json' -d '
> {"content": "even newer content", "text_type": "python"}' \
> "https://linkode.org/api/2/linkode/x1F110pkRqWclAhXVcqtD1/"
{
  "linkode_id": "ww9RtsVzx6srGGjYmlpiY5",
  "linkode_url": "https://linkode.org/api/2/linkode/ww9RtsVzx6srGGjYmlpiY5",
  "root_id": "SrDotVY03btcJBxSAtINC6",
  "root_url": "https://linkode.org/api/2/linkode/SrDotVY03btcJBxSAtINC6"

To get here an example in your favorite programming language please open an issue.



To get a specific linkode node

- type: GET
- url: /api/2/linkode/<linkode_id>/
- returns:
    linkode_id: the unique id of the new node
    linkode_url: the URL to access that node
    content: the text of the node
    text_type: its text type
    read_only: whether it is read only
    timestamp: when it was created
    root_id: the id of the root of all the structure
    root_url: the URL to access the linkode
  
>>> response = requests.get("https://linkode.org/api/2/linkode/TRgCnj5fXrcEC66dALDxt7/")
>>> response.status_code
200
>>> response.json()
{'content': 'even newer content',
 'linkode_id': 'TRgCnj5fXrcEC66dALDxt7',
 'linkode_url': '/api/2/linkode/TRgCnj5fXrcEC66dALDxt7',
 'read_only': False,
 'root_id': '7bxvJqtvFIggJnyNXba1K4',
 'root_url': '/api/2/linkode/7bxvJqtvFIggJnyNXba1K4',
 'text_type': 'python',
 'timestamp': '2024-08-22T19:57:22.244297'}
$ curl -s "https://linkode.org/api/2/linkode/x1F110pkRqWclAhXVcqtD1/"
{
  "content": "new content",
  "linkode_id": "x1F110pkRqWclAhXVcqtD1",
  "read_only": false,
  "linkode_url": "https://linkode.org/api/2/linkode/x1F110pkRqWclAhXVcqtD1",
  "root_id": "SrDotVY03btcJBxSAtINC6",
  "root_url": "https://linkode.org/api/2/linkode/SrDotVY03btcJBxSAtINC6",
  "text_type": "python",
  "timestamp": "2024-08-22T20:12:38.023853"
}

To get here an example in your favorite programming language please open an issue.



To get all the tree of a linkode

- type: GET
- url: /api/2/tree/<linkode_id>/  # only for the root id
- returns:
    A tree structure, each node having:
      linkode_id: the node id
      timestamp: when it was created
      children: a list of nodes (each with exactly this info, recursive) for whose this node is the parent
  
>>> response = requests.get("https://linkode.org/api/2/tree/7bxvJqtvFIggJnyNXba1K4/")
>>> response.status_code
200
>>> response.json()
{'linkode_id': '7bxvJqtvFIggJnyNXba1K4',
 'timestamp': '2024-08-22T12:31:53.237094',
 'order': 1,
 'children': [{'children': [{'children': [],
                             'linkode_id': 'dkaj4P3pJrdpMZomSKuQb7',
                             'order': 3,
                             'timestamp': '2024-08-22T19:57:54.454925'}],
               'order': 2,
               'linkode_id': 'TRgCnj5fXrcEC66dALDxt7',
               'timestamp': '2024-08-22T19:57:22.270264'}]}
$ curl -s "https://linkode.org/api/2/tree/SrDotVY03btcJBxSAtINC6/"
{
  "children": [
    {
      "children": [
        {
          "children": [],
          "linkode_id": "ww9RtsVzx6srGGjYmlpiY5",
          "order": 3,
          "timestamp": "2024-08-22T20:13:24.673839"
        }
      ],
      "linkode_id": "x1F110pkRqWclAhXVcqtD1",
      "order": 2,
      "timestamp": "2024-08-22T20:12:38.499254"
    }
  ],
  "linkode_id": "SrDotVY03btcJBxSAtINC6",
  "order": 1,
  "timestamp": "2024-08-22T12:49:29.845979"
}

To get here an example in your favorite programming language please open an issue.