# Fulfil.hr API ## Authentication API There are 2 options of authentication. 1. With an API key 2. With JWT on /api/token/ and /api/token/refresh/ using fields `username` and `password`. ## Order API ### /api/order/ - GET method Returns a list of all existing orders for the authenticated user. All results are ordered by their creation date ($1^{st}$ is the most recent order) Available query parameters: * start: lists all orders that were submited after (inclusively) the start date (UNIX timestamp). Default: blank -> since the begining * end: lists all orders that were submited before (inclusevly) the end date (UNIX timestamp). Default: blank -> till now Example: GET request: `curl https://fulfil.hr/api/order/?start=1400000000&end=1500000000` GET response: ``` { "orders": [ { "id": "8e9d537d-b1a9-4fb0-b69e-6bf98bf599ff", "order_id": "#123456789", "status": "accepted" }, { "id": "100838ef-da55-42c6-a873-8e18a8d76782", "order_id": "#123456788", "status": "shipped" } ] } ``` - POST method Accepts the order details. Payload data: ``` { "order_id": "#YourInternalOrderID", "address": { "full_name": "John Doe", "street_name": "Doey Street", "street_number": "8", "city": "Johnburg", "zip": "10000", "country": "The Country" }, "items": [ { "product": "12345679", // Product ID "quantity": 5 }, { "product": "12345678", "quantity": 5 } ], "invoice": "https://yoursite.com/invoices/YourInternalOrderID.pdf", // May be blank "price": 15.3, "currency": "EUR" "cash_on_delivery": true } ``` Response data: ``` { "id": "a1824d41-a343-47cd-8906-b0ed1bebc74a", "order_id": "#YourInternalOrderID", "address": { "full_name": "John Doe", "street_name": "Doey Street", "street_number": "8", "city": "Johnburg", "zip": "10000", "country": "The Country" }, "items": [ { "product": "12345679", // Product ID "quantity": 5 }, { "product": "12345678", "quantity": 5 } ], "status": "accepted", "invoice": "https://yoursite.com/invoices/YourInternalOrderID.pdf", // "" if blank "price": 15.3, "currency": "EUR" "cash_on_delivery": true, "Errors": [ "Some descriptive error. This list is skipped if no error is returned." ] } ``` ### /api/order/{id} - GET method This API endpoint is used to get details about order. Instead of {id} in the URL, use order ID ("id"). Response: ``` { "id": "a1824d41-a343-47cd-8906-b0ed1bebc74a", "order_id": "#YourInternalOrderID", "address": { "full_name": "John Doe", "street_name": "Doey Street", "street_number": "8", "city": "Johnburg", "zip": "10000", "country": "The Country" }, "items": [ { "product": "12345679", // Product ID "quantity": 5 }, { "product": "12345678", "quantity": 5 } ], "status": "accepted", "invoice": "https://fulfil.hr/invoices/a1824d41-a343-47cd-8906-b0ed1bebc74a.pdf, // "" if blank "price": 15.3, "currency": "EUR" "cash_on_delivery": true, "status_changes": [ { "from": "none", "to": "accepted", "timestamp": 1500000000 }, { "from": "accepted", "to": "shipped", "timestamp": 1500010000 }, { "from": "shipped", "to": "delivered", "timestamp": 1500020000 } ] } ``` ## Stock API ### /api/stock/ - GET method Returns a list of all products and their stock state. Available query parameter: * product_id: ID of the product in your store * id: ID of the product in fulfil. Paramerters are mutualy exclusive. Example: `curl https://fulfil.hr/api/stock/` ``` { "products": [ { "id": "8e9d537d-b1a9-4fb0-b69e-6bf98bf599ff", "product_id": "123456", "product_name": "The product", "on_stock": 1234 }, { "id": "100838ef-da55-42c6-a873-8e18a8d76782", "product_id": "123457", "product_name": "The other product", "on_stock": 1243 } ] } ``` Example: `curl https://fulfil.hr/api/stock/?id=8e9d537d-b1a9-4fb0-b69e-6bf98bf599ff` ``` { "products": [ { "id": "8e9d537d-b1a9-4fb0-b69e-6bf98bf599ff", "product_id": "123456", "product_name": "The product", "on_stock": 1234 } ] } ``` Example: `curl https://fulfil.hr/api/stock/?product_id=123456` ``` { "products": [ { "id": "8e9d537d-b1a9-4fb0-b69e-6bf98bf599ff", "product_id": "123456", "product_name": "The product", "on_stock": 1234 } ] } ```