mirror of
https://github.com/spiral-project/ihatemoney.git
synced 2025-04-29 01:42:37 +02:00
Update API doc
This commit is contained in:
parent
ff2a5cc147
commit
dc793effce
1 changed files with 67 additions and 25 deletions
92
docs/api.rst
92
docs/api.rst
|
@ -4,7 +4,9 @@ The REST API
|
||||||
All of what's possible to do with the website is also possible via a web API.
|
All of what's possible to do with the website is also possible via a web API.
|
||||||
This document explains how the API is organized and how you can query it.
|
This document explains how the API is organized and how you can query it.
|
||||||
|
|
||||||
The only supported data format is JSON.
|
The main supported data format is JSON. When using POST or PUT, you can
|
||||||
|
either pass data encoded in JSON or in ``application/x-www-form-urlencoded``
|
||||||
|
format.
|
||||||
|
|
||||||
Overall organisation
|
Overall organisation
|
||||||
====================
|
====================
|
||||||
|
@ -31,7 +33,7 @@ instead of basic auth.
|
||||||
For instance, start by generating the token (of course, you need to authenticate)::
|
For instance, start by generating the token (of course, you need to authenticate)::
|
||||||
|
|
||||||
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/token
|
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/token
|
||||||
{"token": "eyJwcm9qZWN0X2lkIjoiZGVtbyJ9.M86C3AiZa_SFEyiddYXdTh2-OOI"}
|
{"token": "WyJ0ZXN0Il0.Rt04fNMmxp9YslCRq8hB6jE9s1Q"}
|
||||||
|
|
||||||
Make sure to store this token securely: it allows full access to the project.
|
Make sure to store this token securely: it allows full access to the project.
|
||||||
For instance, use it to obtain information about the project (replace PROJECT_TOKEN with
|
For instance, use it to obtain information about the project (replace PROJECT_TOKEN with
|
||||||
|
@ -47,7 +49,7 @@ looks like::
|
||||||
This token can also be used to authenticate for a project on the web interface, which can be useful
|
This token can also be used to authenticate for a project on the web interface, which can be useful
|
||||||
to generate invitation links. You would simply create an URL of the form::
|
to generate invitation links. You would simply create an URL of the form::
|
||||||
|
|
||||||
https://ihatemoney.org/authenticate?token=PROJECT_TOKEN
|
https://ihatemoney.org/demo/join/PROJECT_TOKEN
|
||||||
|
|
||||||
Such a link grants full access to the project associated with the token.
|
Such a link grants full access to the project associated with the token.
|
||||||
|
|
||||||
|
@ -64,10 +66,16 @@ Creating a project
|
||||||
|
|
||||||
A project needs the following arguments:
|
A project needs the following arguments:
|
||||||
|
|
||||||
* ``name``: The project name (string)
|
* ``name``: the project name (string)
|
||||||
* ``id``: the project identifier (string without special chars or spaces)
|
* ``id``: the project identifier (string without special chars or spaces)
|
||||||
* ``password``: the project password / secret code (string)
|
* ``password``: the project password / secret code (string)
|
||||||
* ``contact_email``: the contact email
|
* ``contact_email``: the contact email (string)
|
||||||
|
|
||||||
|
Optional arguments:
|
||||||
|
|
||||||
|
* ``default_currency``: the default currency to use for a multi-currency project,
|
||||||
|
in ISO 4217 format. Bills are converted to this currency for operations like balance
|
||||||
|
or statistics. Default value: ``XXX`` (no currency).
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
|
@ -75,7 +83,7 @@ A project needs the following arguments:
|
||||||
-d 'name=yay&id=yay&password=yay&contact_email=yay@notmyidea.org'
|
-d 'name=yay&id=yay&password=yay&contact_email=yay@notmyidea.org'
|
||||||
"yay"
|
"yay"
|
||||||
|
|
||||||
As you can see, the API returns the identifier of the project
|
As you can see, the API returns the identifier of the project.
|
||||||
|
|
||||||
Getting information about the project
|
Getting information about the project
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -88,6 +96,7 @@ Getting information about the project::
|
||||||
"id": "demo",
|
"id": "demo",
|
||||||
"name": "demonstration",
|
"name": "demonstration",
|
||||||
"contact_email": "demo@notmyidea.org",
|
"contact_email": "demo@notmyidea.org",
|
||||||
|
"default_currency": "XXX",
|
||||||
"members": [{"id": 11515, "name": "f", "weight": 1.0, "activated": true, "balance": 0},
|
"members": [{"id": 11515, "name": "f", "weight": 1.0, "activated": true, "balance": 0},
|
||||||
{"id": 11531, "name": "g", "weight": 1.0, "activated": true, "balance": 0},
|
{"id": 11531, "name": "g", "weight": 1.0, "activated": true, "balance": 0},
|
||||||
{"id": 11532, "name": "peter", "weight": 1.0, "activated": true, "balance": 5.0},
|
{"id": 11532, "name": "peter", "weight": 1.0, "activated": true, "balance": 5.0},
|
||||||
|
@ -151,22 +160,55 @@ You can get the list of bills by doing a ``GET`` on
|
||||||
|
|
||||||
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/bills
|
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/bills
|
||||||
|
|
||||||
Add a bill with a ``POST`` query on ``/api/projects/<id>/bills``. you need the
|
Or get a specific bill by ID::
|
||||||
following params:
|
|
||||||
|
|
||||||
* ``date``: the date of the bill; defaults to current date if not
|
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/bills/42
|
||||||
provided. (format is ``yyyy-mm-dd``)
|
{
|
||||||
* ``what``: what have been payed
|
"id": 42,
|
||||||
* ``payer``: by who ? (id)
|
"payer_id": 11,
|
||||||
* ``payed_for``: for who ? (id, to set multiple id use a list,
|
"owers": [
|
||||||
e.g. ``["id1", "id2"]``)
|
{
|
||||||
* ``amount``: amount payed
|
"id": 22,
|
||||||
|
"name": "Alexis",
|
||||||
|
"weight": 1,
|
||||||
|
"activated": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"amount": 100,
|
||||||
|
"date": "2020-12-24",
|
||||||
|
"creation_date": "2021-01-13",
|
||||||
|
"what": "Raclette du nouvel an",
|
||||||
|
"external_link": "",
|
||||||
|
"original_currency": "XXX",
|
||||||
|
"converted_amount": 100
|
||||||
|
}
|
||||||
|
|
||||||
|
``amount`` is expressed in the ``original_currency`` of the bill, while
|
||||||
|
``converted_amount`` is expressed in the project ``default_currency``.
|
||||||
|
Here, they are the same.
|
||||||
|
|
||||||
|
Add a bill with a ``POST`` query on ``/api/projects/<id>/bills``. You need the
|
||||||
|
following required parameters:
|
||||||
|
|
||||||
|
* ``what``: what has been paid (string)
|
||||||
|
* ``payer``: paid by who? (id)
|
||||||
|
* ``payed_for``: for who ? (id). To set multiple id, simply pass
|
||||||
|
the parameter multiple times (x-www-form-urlencoded) or pass a list of id (JSON).
|
||||||
|
* ``amount``: amount payed (float)
|
||||||
|
|
||||||
|
And optional parameters:
|
||||||
|
|
||||||
|
* ``date``: the date of the bill (``yyyy-mm-dd`` format). Defaults to current date
|
||||||
|
if not provided.
|
||||||
|
* ``original_currency``: the currency in which ``amount`` has been paid (ISO 4217 code).
|
||||||
|
Only makes sense for a project with currencies. Defaults to the project ``default_currency``.
|
||||||
|
* ``external_link``: an optional URL associated with the bill.
|
||||||
|
|
||||||
Returns the id of the created bill ::
|
Returns the id of the created bill ::
|
||||||
|
|
||||||
$ curl --basic -u demo:demo -X POST\
|
$ curl --basic -u demo:demo -X POST\
|
||||||
https://ihatemoney.org/api/projects/demo/bills\
|
https://ihatemoney.org/api/projects/demo/bills\
|
||||||
-d "date=2011-09-10&what=raclette&payer=31&payed_for=31&amount=200"
|
-d "date=2011-09-10&what=raclette&payer=1&payed_for=3&payed_for=5&amount=200"
|
||||||
80
|
80
|
||||||
|
|
||||||
You can also ``PUT`` a new version of the bill at
|
You can also ``PUT`` a new version of the bill at
|
||||||
|
@ -174,7 +216,7 @@ You can also ``PUT`` a new version of the bill at
|
||||||
|
|
||||||
$ curl --basic -u demo:demo -X PUT\
|
$ curl --basic -u demo:demo -X PUT\
|
||||||
https://ihatemoney.org/api/projects/demo/bills/80\
|
https://ihatemoney.org/api/projects/demo/bills/80\
|
||||||
-d "date=2011-09-10&what=raclette&payer=31&payed_for=31&amount=250"
|
-d "date=2011-09-10&what=raclette&payer=1&payed_for=3&payed_for=5&payed_for=1&amount=250"
|
||||||
80
|
80
|
||||||
|
|
||||||
And you can of course ``DELETE`` them at
|
And you can of course ``DELETE`` them at
|
||||||
|
@ -194,15 +236,15 @@ You can get some project stats with a ``GET`` on
|
||||||
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/statistics
|
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/statistics
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"balance": 12.5,
|
"member": {"activated": true, "id": 1, "name": "alexis", "weight": 1.0},
|
||||||
"member": {"activated": True, "id": 1, "name": "alexis", "weight": 1.0},
|
"paid": 25.5,
|
||||||
"paid": 25.0,
|
"spent": 15,
|
||||||
"spent": 12.5
|
"balance": 10.5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"balance": -12.5,
|
"member": {"activated": true, "id": 2, "name": "fred", "weight": 1.0},
|
||||||
"member": {"activated": True, "id": 2, "name": "fred", "weight": 1.0},
|
"paid": 5,
|
||||||
"paid": 0,
|
"spent": 15.5,
|
||||||
"spent": 12.5
|
"balance": -10.5
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue