Konto REST API
API Versioning
Version Policy
All endpoints are under the /api/v1/ path prefix. The current version is v1 and is considered stable.
|
| Rule | Detail |
|---|---|
| Backwards compatibility | Breaking changes (removed fields, changed types, removed endpoints) will only be introduced under a new version number (e.g. /api/v2/). Additive changes (new optional fields, new endpoints) may be made to v1 without notice. |
| Deprecation notice | Deprecated endpoints will be documented here with a notice period before removal. No endpoints are currently deprecated. |
| Current stable version | v1 — actively maintained, no planned end-of-life date. |
Response Format
Response Envelope
Every endpoint returns a consistent JSON envelope with the following top-level fields. The shape of result is described in each endpoint's Response table.
| Field | Type | Description |
|---|---|---|
status |
boolean | true when the request succeeded; false when it failed. |
message |
string | When status is false, contains the error reason. When status is true, may contain a success confirmation or be empty. |
result |
mixed | The payload on success — type and shape vary by endpoint. null or absent when status is false. |
|
|
Authentication
Authenticate test
Test auth with konto api
GEThttps://konto.is/api/v1/hello
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string |
if status is TRUE then messge will "Connection succeeded"
if status is FALSE then messge will describe this error |
|
name |
string | Display name of the authenticated user or company | |
registration_no |
string | Company registration number (kennitala) of the account | |
vat_no |
string | VAT number of the company |
| curl -k -X GET "https://konto.is/api/v1/hello?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Header-based Authentication
As an alternative to passing username and api_key as form fields, you can use the standard HTTP Authorization header with Basic authentication. The username is your Konto username and the password is your api_key.
| Header | Value | Description |
|---|---|---|
Authorization |
Basic <base64(username:api_key)> |
Standard HTTP Basic auth. Encode username:api_key in Base64 and prefix with Basic . |
|
Both methods (form fields and Authorization header) are accepted on all endpoints. If both are present, the form field values take precedence. |
| Always use HTTPS to prevent credentials from being intercepted in transit. |
Customer
Customer detail
Customer detail example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this customer | |
output_select |
string | 2: Send e-invoice to a particular Trading Partner ID, 3: Do not send e-invoice(XML), 4: Print - Do not send email | |
address |
string | Street address | |
zip |
string | Postal/zip code | |
city |
string | City name | |
registration_no |
string | Company or personal registration number (kennitala) | |
email |
string | user@example.com | Email address |
term |
string | Default payment terms code for this customer | |
photo |
base64string | Profile photo encoded as a base64 string | |
due_date |
integer | Default due date offset in days from invoice date | |
settlement_date |
integer | Default settlement date offset in days from invoice date | |
trading_partner_id |
string | Trading partner ID for e-invoice routing | |
phone_number |
string | Contact phone number | |
vat |
string | VAT rate applied to this customer | |
lang |
string | is or en | |
currency |
string | ISK,EUR,USD,DKK,NOK,SEK,JPY,GBP,AUD,PLN,CAD,CHF,CNY,NZD,MXN,SGD,HKD,KRW,TRY,RUB,INR,VND,BRL,ZAR,UAH,CZK | |
tax_exempt |
boolean | Whether this customer is exempt from VAT | |
updated_timestamp |
string | Timestamp of the last update | |
is_claim |
boolean | Only available If user has active claim subscription | |
is_discount |
boolean | Only available If user has active discount subscription |
List Customers
Get list customers with konto api
GEThttps://konto.is/api/v1/get-customers
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
search |
string | (optional) search key with name customer | |
limit |
integer | (optional) item per page default all customer | |
page |
integer | (optional) page number |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
object | if status is TRUE is show list customer |
| curl -k -X GET "https://konto.is/api/v1/get-customers?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Count Customers
Get count customers with konto api
GEThttps://konto.is/api/v1/get-count-customers
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
search |
string | (optional) search key with name customer |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is show count customer |
| curl -k -X GET "https://konto.is/api/v1/get-count-customers?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
List Customers By Kennitala
Get list customers with konto api
GEThttps://konto.is/api/v1/get-customers-by-kennitala
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
kennitala |
string | 4444444444 | (optional) search key with kennitala customer |
limit |
integer | (optional) item per page default all customer | |
page |
integer | (optional) page number |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
object | if status is TRUE is show list customer |
| curl -k -X GET "https://konto.is/api/v1/get-customers-by-kennitala?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Count Customers By Kennitala
Get count customers with konto api
GEThttps://konto.is/api/v1/get-count-customers-by-kennitala
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
kennitala |
string | 4444444444 | (optional) search key with kennitala customer |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is show count customer |
| curl -k -X GET "https://konto.is/api/v1/get-count-customers-by-kennitala?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Get Customer
Get detail customer with konto api
GEThttps://konto.is/api/v1/get-customer
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
json | if status is TRUE is detail customer |
| curl -k -X GET "https://konto.is/api/v1/get-customer?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d&guid=5a140a1c-13c6-11e7-9914-408d5c6208bc" |
Create Customer
Create a customer with konto api
POSThttps://konto.is/api/v1/create-customer
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
data |
json | |
(required) json of detail customer |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of customer |
| curl -k -X POST -F username="testuser" -F api_key="3a62cd2568635f115c975b8bd1317e3d" -F data="{\"output_select\":3,\"registration_no\":\"1111111111\",\"name\":\"Test\",\"address\":\"Abc\",\"zip\":\"104\",\"city\":\"Abc\",\"email\":\"xxxx@gmail.com\",\"lang\":\"is\",\"currency\":\"ISK\"}" https://konto.is/api/v1/create-customer |
Update Customer
Update a customer with konto api
POSThttps://konto.is/api/v1/update-customer
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
data |
json | |
(required) json of detail customer |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of customer |
| curl -k -X POST -F username="testuser" -F api_key="3a62cd2568635f115c975b8bd1317e3d" -F guid="614669f6-3560-11e7-8d19-408d5c6208bc" -F data="{\"output_select\":3,\"registration_no\":\"1111111111\",\"name\":\"Test\",\"address\":\"Abc\",\"zip\":\"104\",\"city\":\"Abc\",\"email\":\"xxxx@gmail.com\",\"lang\":\"is\",\"currency\":\"ISK\"}" https://konto.is/api/v1/update-customer |
Item
Item detail
Item detail example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this item | |
item_number |
string | Auto generate by konto | |
description |
string | Description or name of this product or service | |
uom |
string | C62 | Unit of measure (C62,KGS,MTR,LTR,MTK,MTQ,TNE,KWH,DAY,HUR,MIN,KTM) |
tax |
string | S | S,AA,Z |
unit_price |
float | Default selling price per unit | |
category |
string | Category or cost account code for this item | |
active |
boolean | Whether this item is active and available for use | |
updated_timestamp |
string | Timestamp of the last update |
List Items
Get list items with konto api
GEThttps://konto.is/api/v1/get-items
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
limit |
integer | (optional) item per page default all customer | |
page |
integer | (optional) page number |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
object | if status is TRUE is show list item |
| curl -k -X GET "https://konto.is/api/v1/get-items?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Count Items
Get count items with konto api
GEThttps://konto.is/api/v1/get-count-items
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is show count item |
| curl -k -X GET "https://konto.is/api/v1/get-count-items?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Get Item
Get detail item with konto api
GEThttps://konto.is/api/v1/get-item
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
json | if status is TRUE is detail item |
| curl -k -X GET "https://konto.is/api/v1/get-item?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d&guid=f120bb56-f080-11e6-a96f-0050560102f2" |
Create Item
Create a item with konto api
POSThttps://konto.is/api/v1/create-item
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
data |
json | |
(required) json of detail item |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of item |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F data="{\"description\":\"Test\",\"uom\":\"KGS\",\"tax\":\"AA\",\"unit_price\":\"200\",\"category\":\"\",\"active\":\"1\"}" https://konto.is/api/v1/create-item |
Update Item
Update a item with konto api
POSThttps://konto.is/api/v1/update-item
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
data |
json | |
(required) json of detail item |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of item |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=053a639f-3565-11e7-8d19-408d5c6208bc -F data="{\"description\":\"Test\",\"uom\":\"KGS\",\"tax\":\"AA\",\"unit_price\":\"200\",\"category\":\"\",\"active\":\"1\"}" https://konto.is/api/v1/update-item |
Invoice
Invoice detail
Invoice detail example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this invoice | |
number |
string | Invoice number assigned by the system | |
amount |
float | Total amount of the invoice | |
currency |
string | ISK,EUR,USD,DKK,NOK,SEK,JPY,GBP,AUD,PLN,CAD,CHF,CNY,NZD,MXN,SGD,HKD,KRW,TRY,RUB,INR,VND,BRL,ZAR,UAH,CZK, | |
status |
string | Draft, Sent, Cancelled, Paid, Collection | |
created_date |
datetime | Format (Y-m-d) | |
issue_date |
datetime | Format (Y-m-d) | |
due_date |
datetime | Format (Y-m-d) | |
settlement_date |
datetime | Format (Y-m-d) | |
paid_date |
datetime | Format (Y-m-d). The date the invoice or its bank claim was paid; empty while unpaid | |
description |
string | Description or memo for this invoice | |
booking |
string | Booking reference or information for this invoice | |
cost_provide |
string | Cost location or cost provider reference | |
delivery_date |
datetime | Format (Y-m-d) | |
terms |
string | Payment or delivery terms text | |
type |
string | invoice,credit | |
refer_guid |
string | GUID of the invoice this one refers to: on a credit note, the invoice it credits; on a collection cost invoice (Innheimtukostnaður), the claim it was issued for | |
accounting_status |
string | Created,Posted,Skipped,Error | |
accounting_message |
string | Message returned from the accounting system integration | |
updated_timestamp |
string | Timestamp of the last update | |
xml_status |
string | Status update from invoice hub (IS: Skeytamiðlun) | |
claim_id |
string | External claim system identifier | |
claim_status |
string | sent,paid,cancel | |
capital_gains_tax |
float | Capital gains tax amount on this invoice | |
other_default_costs_amount |
float | Other default cost charges amount | |
default_charge_amount |
float | Default charge or fee amount | |
default_interest_amount |
float | Default interest amount | |
bank_transaction_amount |
float | Amount of the associated bank transaction | |
total_24vat |
float | Total amount of items subject to 24% VAT | |
total_11vat |
float | Total amount of items subject to 11% VAT | |
total_0vat |
float | Total amount of items subject to 0% VAT | |
exchange_rate |
float | Exchange rate used for non-ISK currency conversion | |
items |
string | list invoice item | |
customer |
string | invoice customer |
Invoice item detail
Invoice item detail example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this invoice line item | |
item_number |
string | Product or item number from the item list | |
description |
string | Description text for this line item | |
qty |
integer | Quantity of units | |
uom |
string | C62 | Unit of measure (C62,KGS,MTR,LTR,MTK,MTQ,TNE,KWH,DAY,HUR,MIN,KTM) |
tax |
string | S | S,AA,Z |
unit_price |
float | Price per unit | |
discount |
float | Discount amount or percentage applied to this line | |
discount_type |
boolean | 1: %, 0: price |
Invoice customer detail
Invoice customer detail example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this customer | |
name |
string | Display name of the customer | |
address |
string | Street address | |
zip |
string | Postal/zip code | |
city |
string | City name | |
registration_no |
string | Company or personal registration number (kennitala) | |
email |
string | user@example.com | Email address |
Invoice item detail for create
Invoice item detail for create example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | GUID of an existing item to use (alternative to item_number) | |
item_number |
string | required | |
description |
string | required | |
qty |
integer | required | |
uom |
string | C62 | required Unit of measure (C62,KGS,MTR,LTR,MTK,MTQ,TNE,KWH,DAY,HUR,MIN,KTM) |
unit_price |
float | required | |
tax |
string | S | required S(24%), AA(11%), Z(0%) |
discount |
float | Discount amount or percentage applied to this line | |
discount_type |
boolean | 1: %, 0: price |
Invoice customer detail for create
Invoice customer detail for create example json
| Parameter | Type | Example | Description |
|---|---|---|---|
output_select |
string | 2: Send e-invoice to a particular Trading Partner ID, 3: Do not send e-invoice(XML), 4: Print - Do not send email | |
guid |
string | Unique identifier (UUID) of an existing customer to link | |
name |
string | Display name of the customer | |
address |
string | Street address | |
zip |
string | Postal/zip code | |
city |
string | City name | |
registration_no |
string | Company or personal registration number (kennitala) | |
email |
string | user@example.com | Email address |
term |
string | Default payment terms code for this customer | |
photo |
base64string | Profile photo encoded as a base64 string | |
due_date |
integer | Default due date offset in days from invoice date | |
settlement_date |
integer | Default settlement date offset in days from invoice date | |
trading_partner_id |
string | Trading partner ID for e-invoice routing | |
lang |
string | is or en | |
currency |
string | ISK,EUR,USD,DKK,NOK,SEK,JPY,GBP,AUD,PLN,CAD,CHF,CNY,NZD,MXN,SGD,HKD,KRW,TRY,RUB,INR,VND,BRL,ZAR,UAH,CZK | |
tax_exempt |
boolean | Whether this customer is exempt from VAT | |
updated_timestamp |
string | Timestamp of the last update | |
phone_number |
string | Contact phone number | |
vat |
string | VAT rate applied to this customer | |
is_claim |
boolean | Only available If user has active claim subscription | |
is_discount |
boolean | Only available If user has active discount subscription |
Invoice detail for create
Invoice detail for create example json
| Parameter | Type | Example | Description |
|---|---|---|---|
amount |
float | required | |
currency |
string | required ISK,EUR,USD,DKK,NOK,SEK,JPY,GBP,AUD,PLN,CAD,CHF,CNY,NZD,MXN,SGD,HKD,KRW,TRY,RUB,INR,VND,BRL,ZAR,UAH,CZK | |
issue_date |
datetime | required Format (Y-m-d) | |
due_date |
datetime | required Format (Y-m-d) | |
settlement_date |
datetime | required Format (Y-m-d) | |
description |
string | Description or memo for this invoice | |
booking |
string | Booking reference or information for this invoice | |
cost_provide |
string | Cost location or cost provider reference | |
delivery_date |
datetime | Format (Y-m-d) | |
terms |
string | Payment or delivery terms text | |
type |
string | required invoice,credit | |
ref_invoice_guid |
string | required when type is credit — GUID of the original invoice being credited. Must belong to the same user and have type_outsite = invoice | |
items |
string | required list invoice item | |
customer |
string | required invoice customer | |
trading_partner_id |
string | Trading partner ID for e-invoice routing | |
is_claim |
boolean | Whether to submit this invoice to the claim system. Cannot be true when mark_paid or is_payment_link is true |
|
is_discount |
boolean | Whether a discount is applied to this invoice | |
discount_type |
boolean | 1: %, 0: price | |
discount_value |
float | Discount value (amount or percentage depending on discount_type) | |
payment_fee |
float | Additional payment fee to add to the invoice | |
mark_paid |
boolean | Whether to mark the invoice as paid immediately upon creation. When true, is_claim and is_payment_link must be false |
|
method_payment |
integer | 1 | (optional) Payment method. Only accepted when mark_paid is true and is_claim is false. Allowed values: 1=Cash, 2=Visa credit, 3=Visa debit, 4=MasterCard credit, 5=MasterCard debit, 6=Amex, 7=Customer Account, 8=Other, 9=Direct deposit |
is_payment_link |
boolean | (optional) Whether to generate a payment link for this invoice. Only available if user has an active payment link subscription. Cannot be true when mark_paid or is_claim is true. When set, the response includes a payment_link URL |
|
files |
string | 1111,1222 | Id get from api upload |
save |
boolean | Use for save invoice |
List Invoices
Get list invoices with konto api
GEThttps://konto.is/api/v1/get-invoices
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
accounting_status |
string | (optional) Filter by accounting status. Valid values: Created, Posted, Skipped, Error. Comma-separate for multiple: e.g. Created,Posted. An unrecognised value returns a 400 error with error_code=invalid_accounting_status. |
|
date_filter |
string | optional (created_date, issue_date) default is issue_date | |
from_date |
string | optional Format (Y-m-d) | |
to_date |
string | optional Format (Y-m-d) | |
limit |
integer | (optional) item per page default all invoice | |
sort |
string | date_desc | (optional) Sort order. Allowed values: date_desc (default — most recent issue date first), date_asc (oldest first), created_desc, created_asc. |
page |
integer | (optional) page number |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
object | if status is TRUE is show list invoice |
| curl -k -X GET "https://konto.is/api/v1/get-invoices?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Count Invoices
Get count invoices with konto api
GEThttps://konto.is/api/v1/get-count-invoices
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
accounting_status |
string | (optional) Filter by accounting status. Valid values: Created, Posted, Skipped, Error. Comma-separate for multiple: e.g. Created,Posted. An unrecognised value returns a 400 error with error_code=invalid_accounting_status. |
|
date_filter |
string | optional (created_date, issue_date) default is issue_date | |
from_date |
string | optional Format (Y-m-d) | |
to_date |
string | optional Format (Y-m-d) |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is show count invoices |
| curl -k -X GET "https://konto.is/api/v1/get-count-invoices?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Get Invoice
Get detail invoice with konto api
GEThttps://konto.is/api/v1/get-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
json | if status is TRUE is detail invoice |
| curl -k -X GET "https://konto.is/api/v1/get-invoice?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d&guid=f110ef1e-f080-11e6-a96f-0050560102f2" |
Get Invoice PDF
Get invoice PDF as base64 encoded string with konto api
GEThttps://konto.is/api/v1/get-invoice-pdf
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required invoice guid |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then message will describe this error | |
result.guid |
string | invoice guid | |
result.file_name |
string | PDF file name | |
result.file |
string | base64 encoded PDF file content |
| curl -k -X GET "https://konto.is/api/v1/get-invoice-pdf?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d&guid=f110ef1e-f080-11e6-a96f-0050560102f2" |
Update Invoice
Update a invoice with konto api
POSThttps://konto.is/api/v1/update-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
data |
json | |
(required) |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of invoice |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 -F data="{\"accounting_status\":\"Skipped\",\"accounting_message\":\"Test\"}" https://konto.is/api/v1/update-invoice |
Create Invoice
Create invoice with konto api
POSThttps://konto.is/api/v1/create-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
data |
string |
|
(required) json of detail invoice |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of invoice |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F data="{\"amount\":2,\"currency\":\"USD\",\"customer\":{\"guid\":\"5a14796e-13c6-11e7-9914-408d5c6208bc\"},\"settlement_date\":\"2017-5-20\",\"due_date\":\"2017-5-20\",\"issue_date\":\"2017-5-20\",\"type\":\"invoice\",\"description\":\"Test\",\"booking\":\"Test\",\"cost_provide\":\"Test\",\"terms\":\"Test\",\"delivery_date\":\"\",\"is_claim\":1,\"mark_paid\":0,\"is_discount\":0,\"discount_type\":0,\"discount_value\":0,\"items\":[{\"item_number\":\"1\",\"description\":\"111\",\"qty\":1,\"uom\":\"C62\",\"tax\":\"Z\",\"unit_price\":1,\"discount\":0,\"save\":0,\"discount_type\":0,\"add_new\":1},{\"guid\":\"43521ec8-3413-11e7-b148-408d5c6208bc\",\"qty\":1,\"discount\":0,\"discount_type\":0}]}" https://konto.is/api/v1/create-invoice |
Create Recurring Invoice
Create recurring invoice with konto api
POSThttps://konto.is/api/v1/create-recurring-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
data |
string |
|
(required) json of detail invoice |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of invoice |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F data="{\"recurring_name\" : \"Recurring test\",\"recurring_max_invoice\" : 3,\"recurring_interval\" : \"quarterly\",\"recurring_start_date\" : \"2018-10-10\",\"recurring_link_national\" : 0,\"amount\" : 2,\"currency\" : \"USD\",\"customer\" : {\"guid\" : \"5a14796e-13c6-11e7-9914-408d5c6208bc\"},\"settlement_date\" : \"2018-10-10\",\"due_date\" : \"2018-10-10\",\"issue_date\" : \"2018-09-30\",\"description\" : \"Test\",\"booking\" : \"Test\",\"cost_provide\" : \"Test\",\"terms\" : \"Test\",\"delivery_date\" : \"\",\"is_claim\" : 1,\"is_discount\" : 0,\"discount_type\" : 0,\"discount_value\" : 0,\"mark_paid\" : 0,\"items\" : [{\"item_number\": \"1\",\"description\": \"111\",\"qty\": 1,\"uom\": \"C62\",\"tax\": \"Z\",\"unit_price\": 1,\"discount\": 0,\"discount_type\": 0,\"add_new\": 1},{\"guid\": \"43521ec8-3413-11e7-b148-408d5c6208bc\",\"qty\": 1,\"discount\": 0,\"discount_type\": 0}]}" https://konto.is/api/v1/create-recurring-invoice |
Attachment Invoice
add attachment to invoice with konto api
POSThttps://konto.is/api/v1/upload-file?username={username}&api_key={api_key}
| Parameter | Type | Example | Description |
|---|---|---|---|
file |
file | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is file id of attachment invoice |
| curl -X POST "https://konto.is/api/v1/create-recurring-invoice?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" -H "content-type: multipart/form-data" -F "file=@10121.pdf" |
Do Paid Invoice
Mark an invoice as paid with konto api
POSThttps://konto.is/api/v1/do-paid-invoice?username={username}&api_key={api_key}
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required — guid of the invoice to mark as paid |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then message will describe the error (invoice not found, cannot be changed, or claim cancellation failed) |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 https://konto.is/api/v1/do-paid-invoice |
Cost
Cost detail
Cost detail example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this cost | |
description |
string | Description or memo for this cost entry | |
supplier_id |
string | Supplier kennitala (Icelandic national ID, 10 digits) | |
amount |
float | Total amount of the cost | |
currency |
string | ISK | Currency code for this cost. Supported values: ISK,EUR,USD,DKK,NOK,SEK,JPY,GBP,AUD,PLN,CAD,CHF,CNY,NZD,MXN,SGD,HKD,KRW,TRY,RUB,INR,VND,BRL,ZAR,UAH,CZK |
vat_AA |
float | VAT amount at the AA rate (11%) | |
vat_S |
float | VAT amount at the S rate (24%) | |
cost_code |
string | Service |
Items: ItemsService: ServiceTravel: TravelSales: SalesFinance: FinanceRawMaterial: Raw Material CostsOther: Other3028: Product consumption / material usage2173: Purchased labor and services for resale3033: Salary3085: Pension fund contribution3090: Other salary-related expenses2093: Operating supplies and other production costs2243: Housing operating costs2193: Rent / leasing of facilities2423: Expensed small tools and equipment2443: Maintenance and repairs2353: Various purchased services2383: Miscellaneous office expenses2403: Leasing of movable assets / financing lease2263: Sales expenses, advertisements, etc.3163: Hospitality and gifts to business partners, sponsorships2333: Travel expenses3140: Vehicle expenses2283: Other vehicle expenses2533: Miscellaneous other expenses2633: Interest income and other capital income3653: Interest expenses and other capital expenses5028: Permanent (capitalized) operating assets2153: Item3080: Calc. endurgjald9535: VAT settlement invoice |
how_paid |
integer | 1 |
1: Account (charged to company account) 2: Debit card / Bank 3: Credit card 4: Owner cash (paid out of pocket) |
file |
base64string|null | Base64-encoded attachment file (receipt or invoice image). null if the cost has no attachment. |
|
file_name |
string | Original file name of the attachment | |
file_extension |
string | File extension of the attachment (e.g. pdf, jpg, png) | |
issue_date |
datetime | Format (Y-m-d) | |
created_date |
datetime | Format (Y-m-d) | |
xml |
base64string | Base64-encoded UBL Invoice XML. null if not yet processed. |
|
accounting_status |
string | Created,Posted,Skipped,Error | |
accounting_message |
string | Message last sent with update-cost by the accounting system integration (max 500 characters). Empty string if none. |
|
updated_timestamp |
datetime | Format (Y-m-d) | |
project_name |
string | Name of the linked project, empty string if no project |
List Costs
Get list costs with konto api
GEThttps://konto.is/api/v1/get-costs
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
accounting_status |
string | (optional) Filter by accounting status. Valid values: New, Created, Posted, Skipped, Error. Comma-separate for multiple: e.g. New,Created. An unrecognised value returns a 400 error with error_code=invalid_accounting_status. |
|
type |
string | (optional) filter by cost type (cost_code). Allowed values: 3028, 2173, 3033, 3085, 3090, 2093, 2243, 2193, 2423, 2443, 2353, 2383, 2403, 2263, 3163, 2333, 3140, 2283, 2533, 2633, 3653, 5028, 2153, 3080, 9535. Must be a numeric cost_code. | |
supplier_id |
string | (optional) Filter by supplier kennitala (Icelandic national ID, 10 digits) | |
date_filter |
string | optional — date (default, filters by cost issue date) or created_date (filters by record creation timestamp). Dates are matched in server time (UTC). Only records with show_api = true are returned — records still being processed by AI may not yet appear. |
|
from_date |
string | optional, format Y-m-d. Inclusive lower bound for the selected date_filter field. |
|
to_date |
string | optional, format Y-m-d. Inclusive upper bound (matches up to 23:59:59 on this day). To match records created today, pass both from_date and to_date as today's date. If a newly created record is not returned, the record may still be in AI processing (show_api = false); retry after a few seconds. |
|
limit |
integer | (optional) Number of records per page. Defaults to 10. Note: other list endpoints (get-invoices, get-customers) return all records by default — always pass limit and page explicitly for predictable results. |
|
sort |
string | date_desc | (optional) Sort order. Allowed values: date_desc (default — most recent issue date first), date_asc (oldest first), created_desc, created_asc. |
page |
integer | (optional) page number |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
object | if status is TRUE is show list cost | |
hasMore |
boolean | if true it has more items | |
limit |
integer | item per page | |
page |
integer | page number | |
next_url |
string | url next items |
| curl -k -X GET "https://konto.is/api/v1/get-costs?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Count Costs
Get count costs with konto api
GEThttps://konto.is/api/v1/get-count-costs
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
accounting_status |
string | (optional) Filter by accounting status. Valid values: New, Created, Posted, Skipped, Error. Comma-separate for multiple: e.g. New,Created. An unrecognised value returns a 400 error with error_code=invalid_accounting_status. |
|
type |
string | (optional) filter by cost type (cost_code). Allowed values: 3028, 2173, 3033, 3085, 3090, 2093, 2243, 2193, 2423, 2443, 2353, 2383, 2403, 2263, 3163, 2333, 3140, 2283, 2533, 2633, 3653, 5028, 2153, 3080, 9535. Must be a numeric cost_code. | |
supplier_id |
string | (optional) Filter by supplier kennitala (Icelandic national ID, 10 digits) | |
date_filter |
string | optional — date (default, filters by cost issue date) or created_date (filters by record creation timestamp). Dates are matched in server time (UTC). Only records with show_api = true are counted. |
|
from_date |
string | optional, format Y-m-d. Inclusive lower bound for the selected date_filter field. |
|
to_date |
string | optional, format Y-m-d. Inclusive upper bound (matches up to 23:59:59 on this day). |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is show count costs |
| curl -k -X GET "https://konto.is/api/v1/get-count-costs?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Get Cost
Get detail cost with konto api
GEThttps://konto.is/api/v1/get-cost
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
json | if status is TRUE is detail cost |
| curl -k -X GET "https://konto.is/api/v1/get-cost?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d&guid=f110ef1e-f080-11e6-a96f-0050560102f2" |
Update Cost
Update a cost with konto api
POSThttps://konto.is/api/v1/update-cost
| Parameter | Type | Example | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
username |
string | required | ||||||||||
api_key |
string | required | ||||||||||
guid |
string | required | ||||||||||
data |
json | |
(required) JSON object with the following fields:
|
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE, one of: "Accounting status must be one of: Posted, Skipped, Error" (invalid value); "Only costs with accounting_status Created can be updated via the API" (current status is not Created — either still New/processing or already in a terminal state) | |
result |
integer | if status is TRUE is GUID of cost |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 -F data="{\"accounting_status\":\"Skipped\",\"accounting_message\":\"Test\"}" https://konto.is/api/v1/update-cost |
Move Cost to New
Re-open an approved (Created) cost so it can be edited and re-approved, which regenerates its XML. Only a cost that is approved and not yet Posted can be moved — this is the API equivalent of the "move to New" action in the UI.
POSThttps://konto.is/api/v1/move-cost-to-new
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE, one of: "Field guid is required"; "No cost found" (guid does not exist, or does not belong to the authenticated account); "This cost cannot be moved to New (only approved, non-Posted costs can be re-opened for editing)" (cost is not currently approved, or has already been Posted) | |
result |
string | if status is TRUE is GUID of cost |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 https://konto.is/api/v1/move-cost-to-new |
Delete Cost
Delete a cost with konto api
POSThttps://konto.is/api/v1/delete-cost
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE, one of: "This cost cannot be deleted. It may have been posted by bookkeeping or is still being processed" (accounting_status is Posted, or record is still being processed — if newly created, retry after ~1 s); "No cost found" (guid not found or belongs to another user) |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 https://konto.is/api/v1/delete-cost |
Create Cost
Create a simple cost with konto api
POSThttps://konto.is/api/v1/create-cost
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
date |
string | 2026-01-15 | required (unless cost_ai is enabled). Format Y-m-d |
file |
file | required Allowed: jpg, jpeg, png, gif, pdf. Max 5MB. Images will be resized to max 1028x1028. | |
description |
string | (optional) Cost description |
201
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then message will describe this error | |
result |
string | if status is TRUE returns the guid of the created cost | |
queue |
boolean | TRUE when cost_ai is enabled — cost is queued for AI processing |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F date=2026-01-15 -F file=@receipt.jpg https://konto.is/api/v1/create-cost |
Create Cost Adv
Create a cost with konto api
POSThttps://konto.is/api/v1/create-cost-adv
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
date |
string | 2026-01-15 | required Format Y-m-d |
amount |
number | 5000 | required Total amount. Must be a positive number (credit notes are marked with the credit_note flag, not a negative amount). |
how_paid |
integer | 4 | required 1, 2, 3 or 4 |
supplier_name |
string | required Supplier name | |
supplier_id |
string | required Supplier kennitala (Icelandic national ID, 10 digits) | |
type |
string | required Cost type (cost_code). Allowed values: 3028, 2173, 3033, 3085, 3090, 2093, 2243, 2193, 2423, 2443, 2353, 2383, 2403, 2263, 3163, 2333, 3140, 2283, 2533, 2633, 3653, 5028, 2153, 3080, 9535. The stored cost_code is always the numeric value you send; category-name strings (Items, Service, etc.) are not accepted. | |
description |
string | (optional) Cost description | |
vat_11 |
number | (optional) Thereof 11% VAT amount | |
vat_24 |
number | (optional) Thereof 24% VAT amount | |
credit_note |
boolean | 1 | (optional) Set to mark this cost as a credit note (refund). Amount stays positive; the flag is what marks it as a credit. |
file |
file | (optional) Attachment file. Allowed: jpg, jpeg, png, gif, pdf. Max 5MB. Images will be resized to max 1028x1028. |
201
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then message will describe this error | |
result |
string | if status is TRUE returns the guid of the created cost |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F date=2026-01-15 -F amount=5000 -F how_paid=4 -F supplier_name="Supplier AS" -F supplier_id=1234567890 -F type=Items -F file=@receipt.jpg https://konto.is/api/v1/create-cost-adv |
Bookkeeper
Bookkeeper detail
Bookkeeper detail example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this bookkeeper | |
name |
string | Full name of the bookkeeper | |
username |
string | Login username in the Konto system | |
registration_no |
string | Company registration number (kennitala) | |
vat_no |
string | VAT number of the bookkeeper | |
email |
string | Contact email address | |
service_provider_guid |
string | GUID of the associated service provider | |
status |
String | Registered,Active,Inactive | |
count_of_bookkeepers |
integer | Total number of bookkeepers managed by this account | |
instance_config |
json | JSON configuration settings for this bookkeeper instance |
Tenant detail
Tenant detail example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this tenant | |
name |
string | Full name of the tenant company | |
username |
string | Login username in the Konto system | |
api_key |
string | API authentication key for this tenant | |
registration_no |
string | Company registration number (kennitala) | |
vat_no |
string | VAT number of the tenant | |
email |
string | Contact email address | |
address |
string | Street address | |
zip |
string | Postal/zip code | |
city |
string | City name | |
phone_number |
string | Contact phone number | |
bank_account |
string | Bank account number | |
bank_provider |
string | Name of the bank provider | |
claim_identifier |
string | Identifier used for claim processing | |
bank_username |
string | Username for bank integration | |
bank_password |
string | Password for bank integration (stored encrypted) | |
claim_branch |
string | Branch code used for claim submissions | |
bookkeeper_guid |
string | GUID of the assigned bookkeeper | |
active_plan |
string | Currently active subscription plan name | |
count_of_payusers |
integer | Number of paying users under this tenant | |
active_item |
string | GUID or name of the currently active product/service item |
Get Bookkeeper
Get detail bookkeeper with konto api
GEThttps://konto.is/api/v1/get-bookkeeper
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
json | if status is TRUE is detail bookkeeper |
| curl -k -X GET -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 https://konto.is/api/v1/get-bookkeeper |
Get Tenant
Get detail tenant with konto api
GEThttps://konto.is/api/v1/get-tenant
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
json | if status is TRUE is detail tenant |
| curl -k -X GET -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 https://konto.is/api/v1/get-tenant |
Bookkeeper
Update a bookkeeper with konto api
POSThttps://konto.is/api/v1/update-bookkeeper
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
status |
string | Registered,Active,Inactive | |
count_of_bookkeepers |
integer | ||
instance_config |
json |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of bookkeeper |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 -F status=Active https://konto.is/api/v1/update-bookkeeper |
Bookkeeper Invitations
Invitation Object
Invitation object returned by the list endpoint
| Parameter | Type | Example | Description |
|---|---|---|---|
id |
integer | Unique numeric ID of the invitation | |
email |
string | user@example.com | Email address the invitation was sent to |
sent_date |
string|null | 2026-06-20 | Date the invitation was last (re)sent. null if never sent via resend. |
last_reminder_sent_at |
string|null | 2026-06-20 14:30:00 | Datetime the last reminder was sent. null if no reminder has been sent yet. |
Get Invitations
Get all pending bookkeeper invitations sent by the authenticated user
GEThttps://konto.is/api/v1/get-bookkeeper-invitations
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then message will describe this error | |
result |
array | if status is TRUE, array of invitation objects |
| curl -k -X GET "https://konto.is/api/v1/get-bookkeeper-invitations?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Resend Invitation
Resend a bookkeeper invitation with a new invite code. The old invite link is invalidated. Can only be called once every 48 hours per invitation.
POSThttps://konto.is/api/v1/resend-bookkeeper-invitation
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
id |
integer | required — ID of the invitation to resend |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE, describes the error (e.g. too soon, not found) | |
sent_date |
string | 2026-06-20 | Updated sent date in Y-m-d format |
| A new invite code is generated on each resend, invalidating the previous invite link. |
Returns an error if fewer than 48 hours have passed since the last sent_date. |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F id=42 https://konto.is/api/v1/resend-bookkeeper-invitation |
Remind Invitation
Send a reminder for an existing invitation using the same invite code. Can only be called once every 48 hours per invitation.
POSThttps://konto.is/api/v1/remind-bookkeeper-invitation
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
id |
integer | required — ID of the invitation to remind |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE, describes the error (e.g. too soon, not found) | |
last_reminder_sent_at |
string | 2026-06-20 14:30:00 | Updated datetime of the reminder in Y-m-d H:i:s format |
| Unlike resend, the existing invite code is reused — the original link remains valid. |
Returns an error if fewer than 48 hours have passed since last_reminder_sent_at. |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F id=42 https://konto.is/api/v1/remind-bookkeeper-invitation |
Revoke Invitation
Delete a pending bookkeeper invitation. The invite link is permanently invalidated.
POSThttps://konto.is/api/v1/revoke-bookkeeper-invitation
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
id |
integer | required — ID of the invitation to revoke |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE, describes the error |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F id=42 https://konto.is/api/v1/revoke-bookkeeper-invitation |
Bill-to-Invoices
Invoice detail for create save
Invoice detail for create save example json
| Parameter | Type | Example | Description |
|---|---|---|---|
amount |
float | required | |
currency |
string | required ISK,EUR,USD,DKK,NOK,SEK,JPY,GBP,AUD,PLN,CAD,CHF,CNY,NZD,MXN,SGD,HKD,KRW,TRY,RUB,INR,VND,BRL,ZAR,UAH,CZK | |
issue_date |
datetime | required Format (Y-m-d) | |
due_date |
datetime | required Format (Y-m-d) | |
settlement_date |
datetime | required Format (Y-m-d) | |
description |
string | ||
booking |
string | ||
cost_provide |
string | ||
delivery_date |
datetime | Format (Y-m-d) | |
terms |
string | ||
type |
string | required invoice,credit | |
items |
string | required list invoice item | |
trading_partner_id |
string | ||
is_claim |
boolean | ||
is_discount |
boolean | ||
discount_type |
boolean | 1: %, 0: price | |
discount_value |
float | ||
mark_paid |
boolean | ||
create_type |
string | required user,email | |
kennitala |
string | 4444444444 | required if create_type is user. 10-digit Icelandic national ID. |
email |
string | user@example.com | required if create_type is email |
Create Save Invoice
Create save invoice with konto api
POSThttps://konto.is/api/v1/create-save-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
data |
string |
|
(required) json of detail invoice |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | This is GUID of invoice if create_type is "user" and status is "TRUE" |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F data="{\"amount\":\"2095.6\",\"currency\":\"ISK\",\"create_type\":\"user\",\"kennitala\":\"4444444444\",\"settlement_date\":\"2021-06-09\",\"due_date\":\"2021-06-09\",\"issue_date\":\"2021-06-07\",\"type\":\"invoice\",\"items\":[{\"guid\":\"6be71e6c-d7dd-11e7-b836-005056c00001\",\"qty\":1}]}" https://konto.is/api/v1/create-save-invoice |
Order Invoices
Order invoice detail
Order invoice example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this invoice | |
number |
string | Invoice number assigned by the system | |
amount |
float | Total invoice amount | |
issue_date |
datetime | Format (Y-m-d) |
Invoice detail for create save
Invoice detail for create save example json
| Parameter | Type | Example | Description |
|---|---|---|---|
amount |
float | required | |
currency |
string | required ISK,EUR,USD,DKK,NOK,SEK,JPY,GBP,AUD,PLN,CAD,CHF,CNY,NZD,MXN,SGD,HKD,KRW,TRY,RUB,INR,VND,BRL,ZAR,UAH,CZK | |
settlement_date |
number | required | |
description |
string | Description or memo for this invoice | |
booking |
string | required | |
cost_provide |
string | Cost location or cost provider reference | |
delivery_date |
datetime | Format (Y-m-d) | |
terms |
string | Payment or delivery terms text | |
items |
string | required list invoice item | |
trading_partner_id |
string | Trading partner identifier for e-invoice routing | |
is_claim |
boolean | Whether this invoice is submitted to the claim system | |
is_discount |
boolean | Whether a discount is applied to this invoice | |
discount_type |
boolean | 1: %, 0: price | |
discount_value |
float | The discount amount or percentage value | |
mark_paid |
boolean | Whether to mark the invoice as paid immediately upon creation | |
kennitala |
string | 4444444444 | required 10-digit Icelandic national ID (kennitala). |
Invoice detail for update order
Invoice detail for update order example json
| Parameter | Type | Example | Description |
|---|---|---|---|
amount |
float | Total invoice amount | |
currency |
string | ISK,EUR,USD,DKK,NOK,SEK,JPY,GBP,AUD,PLN,CAD,CHF,CNY,NZD,MXN,SGD,HKD,KRW,TRY,RUB,INR,VND,BRL,ZAR,UAH,CZK | |
settlement_date |
number | Number of days until settlement (payment due offset) | |
description |
string | Description or memo for this invoice | |
booking |
string | Booking reference or information for this invoice | |
cost_provide |
string | Cost location or cost provider reference | |
delivery_date |
datetime | Format (Y-m-d) | |
terms |
string | Payment or delivery terms text | |
items |
string | list invoice item | |
trading_partner_id |
string | Trading partner identifier for e-invoice routing | |
is_claim |
boolean | Whether this invoice is submitted to the claim system | |
is_discount |
boolean | Whether a discount is applied to this invoice | |
discount_type |
boolean | 1: %, 0: price | |
discount_value |
float | The discount amount or percentage value | |
mark_paid |
boolean | Whether to mark the invoice as paid immediately | |
kennitala |
string | 4444444444 | 10-digit Icelandic national ID (kennitala) |
Create Order Invoice
Create order invoice with konto api
POSThttps://konto.is/api/v1/create-order-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
data |
string |
|
(required) json of detail invoice |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of invoice |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F data="{\"amount\":\"2095.6\",\"currency\":\"ISK\",\"kennitala\":\"4444444444\",\"booking\":\"test\",\"settlement_date\":\"10\",\"items\":[{\"guid\":\"6be71e6c-d7dd-11e7-b836-005056c00001\",\"qty\":1}]}" https://konto.is/api/v1/create-order-invoice |
Update Order Invoice
Update order invoice with konto api
POSThttps://konto.is/api/v1/update-order-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
data |
string |
|
(required) json of detail invoice |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of invoice |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 -F data="{\"amount\":\"2095.6\",\"currency\":\"ISK\",\"kennitala\":\"4444444444\",\"settlement_date\":\"10\",\"items\":[{\"guid\":\"6be71e6c-d7dd-11e7-b836-005056c00001\",\"qty\":1}]}" https://konto.is/api/v1/update-order-invoice |
Delete Order Invoice
Delete order invoice with konto api
POSThttps://konto.is/api/v1/delete-order-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 https://konto.is/api/v1/delete-order-invoice |
Get Invoice From Order
Get list invoice from order with konto api
POSThttps://konto.is/api/v1/get-invoices-from-order
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
limit |
integer | (optional) item per page default all invoice | |
page |
integer | (optional) page number |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
object | if status is TRUE is show list invoice |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 https://konto.is/api/v1/get-invoices-from-order |
Draft Invoices
Create Draft Invoice
Create draft invoice with konto api
POSThttps://konto.is/api/v1/create-draft-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
data |
string |
|
(required) json of detail invoice |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of invoice |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F data="{\"amount\":\"2095.6\",\"currency\":\"ISK\",\"kennitala\":\"4444444444\",\"booking\":\"test\",\"settlement_date\":\"10\",\"items\":[{\"guid\":\"6be71e6c-d7dd-11e7-b836-005056c00001\",\"qty\":1}]}" https://konto.is/api/v1/create-order-invoice |
Update Draft Invoice
Update draft invoice with konto api
POSThttps://konto.is/api/v1/update-draft-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
data |
string |
|
(required) json of detail invoice |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of invoice |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 -F data="{\"amount\":\"2095.6\",\"currency\":\"ISK\",\"kennitala\":\"4444444444\",\"settlement_date\":\"10\",\"items\":[{\"guid\":\"6be71e6c-d7dd-11e7-b836-005056c00001\",\"qty\":1}]}" https://konto.is/api/v1/update-order-invoice |
Delete Draft Invoice
Delete draft invoice with konto api
POSThttps://konto.is/api/v1/delete-draft-invoice
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 https://konto.is/api/v1/delete-order-invoice |
Get Invoice From Draft
Get list invoice from draft with konto api
POSThttps://konto.is/api/v1/get-invoices-from-draft
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
limit |
integer | (optional) item per page default all invoice | |
page |
integer | (optional) page number |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
object | if status is TRUE is show list invoice |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 https://konto.is/api/v1/get-invoices-from-order |
Dashboard Data
Invoice detail
Invoice detail example json
| Parameter | Type | Example | Description |
|---|---|---|---|
invoice_creator_username |
string | The unique username from Konto system | |
invoice_issue_date |
date | Format (Y-m-d) | |
invoice_number |
string | The unique invoice number | |
invoice_status |
string | Invoice can be either Paid or Not Paid | |
customer_number |
string | Value from the customer profile (other information) - does not have to be unique - used to group users | |
customer_name |
string | Customer name - from customer profile | |
customer_guid |
string | Unique ID for this customer profile | |
invoice_description |
string | The description value from this invoice | |
document_type |
string | "Invoice" or "Credit Note" | |
invoice_booking_information |
string | The booking information value from this invoice | |
invoice_order_reference |
string | The order reference value from this invoice | |
invoice_cost_location |
string | The Cost location value selected for this invoice | |
invoice_total_excluding_vat |
string | Invoice total amount, excluding VAT | |
invoice_vat_total |
string | Total amount of VAT for this invoice | |
invoice_total_discount |
string | Total amount discounted from this invoice | |
invoice_total_including_vat |
string | Invoice total amount, including VAT | |
items |
string | list invoice item |
Invoice item detail
Invoice item detail example json
| Parameter | Type | Example | Description |
|---|---|---|---|
number |
string | The given Product number | |
name |
string | The given Product Name | |
description |
string | Product Description | |
qty |
integer | Quantity | |
uom |
string | Unit of measure (C62,KGS,MTR,LTR,MTK,MTQ,TNE,KWH,DAY,HUR,MIN,KTM) | |
vat_code |
string | S,AA,Z | |
category_code |
string | Registered value on Product in item-list | |
guid |
string | Unique ID for this product | |
product_cost |
string | Product cost value used to calculate the margin and profit | |
total_excluding_vat |
float | Item line total, excluding the VAT | |
total_vat |
float | Total VAT on the item-line | |
total_including_vat |
float | Item line total, including VAT | |
total_discount |
float | Total amount discounted for this item line (including VAT) | |
profit |
number | Total amount (excluding VAT) minus the Product cost | |
margin |
number | Ratio of Product cost and Sales amount |
Get data
Get list invoice for dashboard data konto api
POSThttps://konto.is/api/v1/get-dashboard-data
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
start_date |
date | (optional) Format (Y-m-d) | |
end_date |
date | (optional) Format (Y-m-d) | |
limit |
integer | (optional) item per page default all invoice | |
page |
integer | (optional) page number |
200
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F guid=f110ef1e-f080-11e6-a96f-0050560102f2 https://konto.is/api/v1/get-dashboard-data |
Invoice Summaries
getInvoiceSummaries
Returns pre-computed invoice summary cards (count + total amount) grouped by status and currency for a given period. Data is read from the invoice_summary_buckets table — O(1) cost regardless of invoice volume.
GEThttps://konto.is/api/v1/invoice-summaries
| Parameter | Type | Example | Description |
|---|---|---|---|
year |
integer | 2026 | Calendar year. Combined with month for a single month, with from_month+to_month for a multi-month range, or alone for a full year. |
month |
integer | 4 | (optional) 1–12. Use with year to select a single month. |
from_month |
integer | 1 | (optional) Start month 1–12. Use with year and to_month for a multi-month range within the same year (e.g. VSK period). |
to_month |
integer | 3 | (optional) End month 1–12. Use with year and from_month. |
from_date |
date | 2026-01-01 | (optional) Start of a custom date range. Format Y-m-d. Use together with to_date. |
to_date |
date | 2026-04-30 | (optional) End of a custom date range. Format Y-m-d. Use together with from_date. |
| Mode | Parameters | Example |
|---|---|---|
| Single month | year + month |
?year=2026&month=4 |
| Multi-month (VSK period) | year + from_month + to_month |
?year=2026&from_month=1&to_month=3 |
| Full year | year |
?year=2026 |
| Custom date range | from_date + to_date |
?from_date=2026-01-15&to_date=2026-04-15 |
200
| Field | Type | Description |
|---|---|---|
status |
boolean | true on success |
period.from |
date | Resolved start of the period (first day of start month). Format Y-m-d. |
period.to |
date | Resolved end of the period (last day of end month). Format Y-m-d. |
summaries |
array | One entry per status. First entry is always total (sum of all statuses). Followed by paid, sent, overdue, collection (only statuses that have data are included). |
summaries[].status |
string | total | paid | sent | overdue | collection |
summaries[].count |
integer | Number of invoices in this status bucket for the period. |
summaries[].amounts |
array | One entry per currency. Each entry has currency (ISO-4217 code, e.g. ISK) and total (decimal amount, negative for credit notes). |
| Status | Meaning |
|---|---|
paid |
Invoice is paid. Credit notes are excluded from this bucket. |
sent |
Invoice is sent and not yet past its due date, with no active collection process. |
overdue |
Invoice is past its due date and unpaid, with no active collection process. |
collection |
Invoice has an active collection process. |
total |
Computed sum of all four statuses above. Not stored in the database — calculated at response time. |
|
|
Task
Task detail
Task example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this task | |
number |
string | Task number assigned by the system | |
name |
string | Name or title of the task | |
status |
string | Current status of the task (e.g. open, closed, invoiced) | |
item |
object | item | |
customer |
object | customer | |
start_time |
datetime | Format (d.m.Y H:i) | |
total_time |
float | Total time logged for this task in hours | |
invoices |
array | list invoice | |
logs |
array | list log | canStart |
boolean | Whether the current user can start this task |
canStop |
boolean | Whether the current user can stop this task | |
canDeactive |
boolean | Whether the current user can deactivate this task | |
project_name |
string | Name of the linked project, empty string if no project |
Task log detail
Task log example json
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | Unique identifier (UUID) for this log entry | |
manual |
boolean | Whether this log entry was entered manually (true) or auto-timed (false) | |
creation_date |
datetime | Date and time this log entry was created (Format Y-m-d H:i:s) | |
quantity |
float | Amount of time logged in hours | |
description |
string | Notes or description for this log entry | |
advanced |
boolean | Whether this is an advanced log entry (uses from/to date range) | |
count_of_workers |
integer | Number of workers involved in this log entry | |
hours_worked_per_day |
integer | Hours worked per day used in advanced mode calculations | |
from_date |
datetime | Start date of this log period (Format Y-m-d) | |
to_date |
datetime | End date of this log period (Format Y-m-d) | |
image |
string | URL or path to an attached image or receipt |
Create task
Create task with konto api
POSThttps://konto.is/api/v1/create-task
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
data |
string |
|
(required) json of detail invoice |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
integer | if status is TRUE is GUID of task |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d -F data="{\"customer_guid\": \"bc2917d7-2dba-11f0-8f4b-d85ed38291f0\",\"name\":\"test\", \"item\": {\"guid\":\"\",\"description\" : \"Test\",\"uom\" : \"KGS\",\"tax\" : \"AA\",\"unit_price\" : \"200\",\"category\" : \"\"}}" https://konto.is/api/v1/create-task |
Get Task
Get task with konto api
POSThttps://konto.is/api/v1/get-task
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
object | if status is TRUE is get detail task |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d https://konto.is/api/v1/get-task |
Get Task
Get list task with konto api
POSThttps://konto.is/api/v1/get-tasks
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
type |
string | optional ('open', 'invoice', 'older') default is open | |
limit |
integer | (optional) item per page default all task | |
page |
integer | (optional) page number |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
object | if status is TRUE is show list task |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d https://konto.is/api/v1/get-tasks |
Get Count Task
Get count task with konto api
POSThttps://konto.is/api/v1/get-count-tasks
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
type |
string | optional ('open', 'invoice', 'older') default is open |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error | |
result |
object | if status is TRUE is show count tasks |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d https://konto.is/api/v1/get-cout-tasks |
Start Task
Start task with konto api
POSThttps://konto.is/api/v1/start-task
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d https://konto.is/api/v1/start-task |
End Task
End task with konto api
POSThttps://konto.is/api/v1/end-task
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
description |
string | Optional notes or description for the completed work | |
file |
file | Optional file attachment (image or document) |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d description="test" https://konto.is/api/v1/end-task |
Log Task
Log task with konto api
POSThttps://konto.is/api/v1/log-task
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
description |
string | Notes or description for this log entry | |
file |
file | Optional file attachment (image or document) | |
adv |
boolean | Whether to use advanced logging mode (from/to date range) | |
date |
date | required Format (Y-m-d) | |
end_date |
date | required Format (Y-m-d) | |
h |
integer | Start hour in HH:MM format (used in advanced mode) | |
p |
integer | End hour in HH:MM format (used in advanced mode) |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d date="2025-10-01" end_date="2025-10-10" description="test" https://konto.is/api/v1/log-task |
Delete Log Task
delete log task with konto api
POSThttps://konto.is/api/v1/task-log-delete
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d https://konto.is/api/v1/task-log-delete |
Edit Log Task
Edit log task with konto api
POSThttps://konto.is/api/v1/edit-log-task
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required | |
description |
string | Notes or description for this log entry | |
file |
file | Optional file attachment (image or document) | |
adv |
boolean | Whether to use advanced logging mode (from/to date range) | |
date |
date | required Format (Y-m-d) | |
end_date |
date | required Format (Y-m-d) | |
h |
integer | Start hour in HH:MM format (used in advanced mode) | |
p |
integer | End hour in HH:MM format (used in advanced mode) |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then messge will describe this error |
| curl -k -X POST -F username=testuser -F api_key=3a62cd2568635f115c975b8bd1317e3d date="2025-10-01" end_date="2025-10-10" description="test" https://konto.is/api/v1/edit-log-task |
Project
Projects group tasks, cost records, sales invoices and scope lines for one customer and show what has been billed and what is still outstanding. Every project action needs the Projects add-on on the account; with an agent token the project scope (or project_read for the read actions). All actions take username and api_key like the rest of the API.
Project detail
Project object
| Parameter | Type | Example | Description |
|---|---|---|---|
guid | string | Immutable identifier (UUID) of the project — use it everywhere a project_guid is asked for | |
project_number | string | PRJ-12 | Per-account project number |
external_ref | string | OPS-4711 | Your own reference, unique per account; empty when not set |
name | string | ||
status | integer | 1 | 1 active, 2 completed, 3 on hold, 4 invoiced, 5 removed |
status_label | string | active | active | completed | on_hold | invoiced | removed |
customer | object | guid, name, registration_no, email — one customer per project | |
owner_team, category | string | Free text | |
start_date, end_date | date | 2026-10-01 | Y-m-d, empty when not set |
estimate_amount | string | 1500000 | The project's own estimate (ISK) |
sort_note, full_note | string | Short brief / long notes | |
invoice_created | boolean | True once an invoice has been created from the project | |
page_published, public_url | boolean, string | The public project page, when published | |
version | integer | 3 | Record version — send it back on update to detect concurrent edits (see Concurrency) |
created_at, updated_at | datetime | 2026-10-11 09:30:15 | |
totals | object | tasks {count, hours, amount, invoiced, outstanding}, costs {count, currency, full, subtotal, invoiced}, products {count, subtotal, invoiced}, invoices {count, amount, outstanding} — the detail page's stat cards. On get-projects only with with_totals=1 | |
tasks, costs, products, invoices, logs, related, files, comments | array | Only when asked for with expand= (comma list). Tasks are task objects, invoices are invoice objects; the rest are described below |
costs)
| Parameter | Type | Description |
|---|---|---|
project_cost_id | integer | Id of the billing row (not a guid) — what the manual-cost actions take |
is_manual | boolean | A manual cost line (no cost record behind it) vs a linked cost record |
cost_guid | string | The linked cost record; empty for a manual line |
supplier, description, date, currency | string | |
full | string | The record's own amount |
subtotal | string | The amount billable to the customer (editable with update-project-cost) |
discount | string | full − subtotal, never below 0 |
invoice_amount, invoiced, invoice_guid | What has been billed, and on which invoice |
products)
| Parameter | Type | Description |
|---|---|---|
product_id | integer | Id of the line (not a guid) — what update-project-product / remove-project-product take |
item_guid | string | The catalogue item it was copied from, empty for an ad-hoc line |
description, qty, unit_price, tax, tax_code | Copied at add time; tax is the rate, tax_code S / AA / Z | |
discount_type, discount_value | percent or amount | |
subtotal, estimated, invoice_amount, invoiced, invoice_guid |
logs / get-project-logs)
| Parameter | Type | Description |
|---|---|---|
log_id | integer | |
type | string | project_created, status_changed, task_added, task_logged, task_done, cost_added, cost_removed, manual_cost_added, invoice_linked, invoice_created, product_added, … |
params | object | The raw values of the event (name, supplier, amount, number, …) |
message | string | The line as the project page shows it |
created_at | datetime |
External references, versions, idempotent writes and incremental sync
These apply to projects, tasks and time entries (task logs), and the sync parameters also to cost records and invoices.
| Feature | How |
|---|---|
| External reference | external_ref (max 128 characters) on create / update of a project, a task and a time entry; unique per account (per task for time entries). Look up with ?external_ref= on get-projects, get-tasks, get-task-logs. A create whose external_ref already exists returns the existing record with "existing": true instead of creating a second one. |
| Record version | Every project, task and time entry carries version, +1 on every change (made in Konto or through the API). Send version with update-project, delete-project, update-task, edit-log-task and delete-task-log: when it is not the current version the write is refused with HTTP 409, error_code version_conflict and current_version. Without version the write is unconditional. |
| Idempotency key | Send an Idempotency-Key header (or idempotency_key parameter, max 128 characters) with any write. A retry with the same key and the same payload returns the stored response again (with header Idempotent-Replayed: true) and creates nothing; the same key with a different payload is refused with HTTP 409 idempotency_key_reuse. Keys are kept for 7 days. |
| Incremental retrieval | updated_since (Y-m-d, Y-m-d H:i:s or ISO 8601, UTC) and/or cursor on get-projects, get-tasks, get-task-logs, get-costs, get-invoices return rows in a deterministic (updated, id) order, limit per page (default 100, max 500), with has_more and next_cursor on the response; pass next_cursor back as cursor for the next page. In this mode the usual sort / page / date parameters are ignored. Add include_removed=1 to also receive removed projects (status 5), archived tasks (status 2) and deleted time entries (deleted_at set). |
| Where projects appear elsewhere | Task: project_guid, project_number, external_ref, version, estimated_amount, qty_invoice, unit_price, amount, invoiced_amount, outstanding_amount, updated_at. Cost: project_guid, project_number, project_subtotal, project_invoiced_amount, project_invoice_guid. Invoice: project_guid, project_number, show_project_link. create-task, create-cost, create-cost-adv and create-invoice accept project_guid (the customer must be the project's customer; for a task it may then be omitted). get-tasks, get-costs and get-invoices filter with project_guid=. |
getProjects
List projects. Templates and removed projects are left out unless asked for.
GEThttps://konto.is/api/v1/get-projects
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
status | string | active | completed | on_hold | invoiced (or 1-4) |
search_text | string | Name, number, owner team, category or customer name |
customer_guid | string | Only this customer's projects |
external_ref | string | Exact match |
from_date / to_date | date | Y-m-d, on created_at |
sort / sort_type | string | created_at (default) | name | start_date | updated_at; down (default) | up |
limit / page | integer | Paginate; the response then carries total, page, limit |
with_totals | boolean | 1 to include totals per project (one query set per project) |
expand | string | Comma list, see Project detail |
include_removed | boolean | 1 to include removed projects |
updated_since / cursor | Sync mode, see above |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | list of project |
getCountProjects
Count projects with the same filters as get-projects.
GEThttps://konto.is/api/v1/get-count-projects
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | integer |
getProject
One project with totals.
GEThttps://konto.is/api/v1/get-project
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
expand | string | tasks, costs, products, invoices, logs, related, files, comments |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | project |
getProjectTemplates
The account's saved project templates with their scope lines, ready to pass as scope to create-project.
GEThttps://konto.is/api/v1/get-project-templates
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | list of {guid, name, sort_note, full_note, category, owner_team, scope[]} |
createProject
Create a project (always Active). data is a JSON object.
POSThttps://konto.is/api/v1/create-project
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
data.name | string | required, max 128 |
data.customer_guid | string | required unless quote_guid is given |
data.external_ref | string | Your reference; an existing one returns that project with existing: true |
data.project_number | integer | Override the automatic PRJ-n number (number only); refused with 409 project_number_exists if taken |
data.owner_team, data.category | string | |
data.start_date, data.end_date | date | Y-m-d |
data.estimate_amount | number | |
data.sort_note, data.full_note | string | |
data.scope | array | Scope lines: {type: product|service, description, item_guid, qty, unit_price, tax (S|AA|Z|0|11|24), discount_type, discount_value, estimated}. A product line becomes a project product, a service line becomes a task of the project |
data.template_guid | string | Copy notes, category, owner team and scope from a template (explicit fields win) |
data.quote_guid | string | Take the customer and lines from a quote |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | the new project's guid; the response also carries project |
updateProject
Change a project. Only the fields present in data are touched.
POSThttps://konto.is/api/v1/update-project
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
data.name, data.customer_guid, data.owner_team, data.category, data.sort_note, data.full_note | ||
data.status | string | active | completed | on_hold | invoiced (or 1-4). Removing is delete-project |
data.start_date, data.end_date | date | Y-m-d; "" clears |
data.estimate_amount | number | |
data.external_ref | string | "" clears; a reference used by another project is refused with 409 external_ref_exists |
data.version | integer | Optimistic check, see above |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | project |
deleteProject
Remove a project (status 5). Its tasks, cost records and invoices keep their link; the project leaves every list.
POSThttps://konto.is/api/v1/delete-project
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
version | integer | Optional optimistic check |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | guid |
getProjectLogs
The project's activity timeline, newest first.
GEThttps://konto.is/api/v1/get-project-logs
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
limit | integer | Default 50, max 500 |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | list of project log |
linkProjectCost
Link one or more of the account's cost records to the project (one cost record belongs to at most one project). Writes the project timeline and the record's history.
POSThttps://konto.is/api/v1/link-project-cost
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required project guid |
cost_guid | string | One cost record |
cost_guids | string|array | Several, comma-separated or an array; all-or-nothing |
subtotal | number | Billable amount for a single record (default: the record's amount) |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | list of project cost row |
updateProjectCost
Set the amount billable to the customer for a linked record or a manual line. Refused once invoiced (409 already_invoiced).
POSThttps://konto.is/api/v1/update-project-cost
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
cost_guid | string | A linked cost record … |
project_cost_id | integer | … or a manual line |
subtotal | number | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | project cost row |
unlinkProjectCost
Detach a cost record from the project (the record itself is untouched). Refused once invoiced.
POSThttps://konto.is/api/v1/unlink-project-cost
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
cost_guid | string | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | cost guid |
createProjectManualCost
A cost line that belongs only to the project (wages, a subcontractor on a contract) and never becomes a cost record. ISK.
POSThttps://konto.is/api/v1/create-project-manual-cost
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
supplier_name | string | required |
amount | number | required, above 0 |
cost_date | date | Y-m-d or D.M.YYYY, default today |
description | string | Max 500 |
project_file_id | integer | One of the project's files |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | project cost row |
updateProjectManualCost
Edit a manual cost line (same fields as create, all sent again). Refused once invoiced.
POSThttps://konto.is/api/v1/update-project-manual-cost
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
project_cost_id | integer | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | project cost row |
deleteProjectManualCost
Delete a manual cost line. Refused once invoiced.
POSThttps://konto.is/api/v1/delete-project-manual-cost
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
project_cost_id | integer | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | project_cost_id |
linkProjectInvoice
Link an existing, sent sales invoice to the project. Drafts, quotes, notes, orders and cancelled invoices are refused; an invoice can be on one project only. Nothing about the invoice (accounting status, XML) changes.
POSThttps://konto.is/api/v1/link-project-invoice
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
invoice_guid | string | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | invoice |
unlinkProjectInvoice
Detach an invoice from the project. An invoice created from the project (it bills the project's tasks, costs or products) cannot be detached (409 created_from_project).
POSThttps://konto.is/api/v1/unlink-project-invoice
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
invoice_guid | string | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | invoice guid |
addProjectProduct
Add a scope / line item to the project, from the catalogue or ad hoc.
POSThttps://konto.is/api/v1/add-project-product
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
item_guid | string | Copy description from a catalogue item … |
description | string | … or type one (required without item_guid) |
qty | number | Default 1 |
unit_price | number | Default 0 |
tax | string | S | AA | Z or 0 | 11 | 24, default 0 |
discount_type / discount_value | percent (default) | amount | |
estimated | number | Default 0 |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | project product |
updateProjectProduct
Change a line (only the fields sent). Refused once invoiced.
POSThttps://konto.is/api/v1/update-project-product
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
product_id | integer | required |
description, qty, unit_price, tax, discount_type, discount_value, estimated |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | project product |
removeProjectProduct
Delete a line. Refused once invoiced.
POSThttps://konto.is/api/v1/remove-project-product
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
product_id | integer | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | product_id |
linkProjects
Mark two of the account's projects as related (idempotent).
POSThttps://konto.is/api/v1/link-projects
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
related_guid | string | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | {link_id, guid, project_number, name} |
unlinkProjects
Remove a manual relation.
POSThttps://konto.is/api/v1/unlink-projects
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required |
related_guid | string | required |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | related guid |
updateTask
Change a task: name, estimated amount, external reference, or the project it belongs to. A task that has been invoiced cannot change project; the project must belong to the task's customer. (Task actions need the task scope.)
POSThttps://konto.is/api/v1/update-task
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
guid | string | required task guid |
data.name | string | |
data.external_ref | string | "" clears |
data.estimated_amount | number | |
data.project_guid | string | Link / move; "" unlinks |
data.version | integer | Optimistic check |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | task |
getTaskLogs
List time entries across tasks. Each entry carries task_guid, guid, external_ref, version, updated_at and (with include_removed) deleted_at. log-task, end-task and edit-log-task now return the entry they wrote and accept external_ref; edit-log-task and delete-task-log accept version.
GEThttps://konto.is/api/v1/get-task-logs
| Parameter | Type | Description |
|---|---|---|
username | string | required |
api_key | string | required |
task_guid | string | |
project_guid | string | |
external_ref | string | Exact match |
from_date / to_date | date | Y-m-d, on the entry's date |
limit / page | integer | Default 50, max 500 |
include_removed | boolean | 1 to include deleted entries |
updated_since / cursor | Sync mode |
200
| Parameter | Type | Description |
|---|---|---|
status | boolean | TRUE on success |
message | string | Describes the error when status is FALSE |
error_code | string | Machine-readable reason on some refusals (version_conflict, idempotency_key_reuse, already_linked, already_invoiced, external_ref_exists, …) |
result | list of task log |
Sell Product
Product Sale detail
Product Sale example object
| Parameter | Type | Example | Description |
|---|---|---|---|
guid |
string | ||
status |
integer | 1 = open, 0 = closed | |
is_open |
boolean | ||
type |
integer | KONTO_SELL_PRODUCT_STAND, KONTO_SELL_PRODUCT_SUB, KONTO_SELL_PRODUCT_DONA, KONTO_SELL_PRODUCT_EVENT | |
url |
string | Public URL of the selling page | |
terms |
string | ||
name |
string | Item description | |
description |
string | Selling notes | |
amount |
float | Price including tax | |
inventory_control |
boolean | ||
inventory_count |
integer | Remaining stock |
Attend detail
Attend row example object (event type only)
| Parameter | Type | Example | Description |
|---|---|---|---|
attendee |
string | Name and email of the attendee e.g. "John Doe (john@example.com)" | |
phone_number |
string | ||
qty |
integer | Number of tickets | |
invoice_number |
string | ||
kennitala |
string | 4444444444 | National ID of the buyer (10-digit Icelandic kennitala) |
invoice_status |
string | e.g. "Paid", "Not paid on time" | |
name |
string | Buyer name | |
zip |
string | Buyer zip/postal code | |
city |
string | Buyer city | |
address |
string | Buyer address | |
message |
string | Message left by buyer | |
attended |
string | "true" or "false" | |
fields |
array | [{"label":"Field Name","value":"Field Value"}] |
Custom fields submitted by the buyer. Each entry has label (field key) and value (field value) |
List Product Sales
Get list of product sales with konto api
GEThttps://konto.is/api/v1/get-product-sales
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
search_text |
string | (optional) filter by description | |
limit |
integer | (optional) items per page, default uses system setting | |
page |
integer | (optional) page number, default 1 |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then message will describe the error | |
result |
array | if status is TRUE shows list of product sale | |
total |
integer | total number of items | |
page |
integer | current page number |
| curl -k -X GET "https://konto.is/api/v1/get-product-sales?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
Count Product Sales
Get count of product sales with konto api
GEThttps://konto.is/api/v1/get-count-product-sales
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
search_text |
string | (optional) filter by description |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then message will describe the error | |
result |
integer | if status is TRUE shows count of product sales |
| curl -k -X GET "https://konto.is/api/v1/get-count-product-sales?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d" |
List Product Sale Attendees
Get list of attendees for an event-type product sale with konto api
GEThttps://konto.is/api/v1/get-product-sale-attends
| Parameter | Type | Example | Description |
|---|---|---|---|
username |
string | required | |
api_key |
string | required | |
guid |
string | required guid of the selling (must be type event) | |
limit |
integer | (optional) items per page, default uses system setting | |
page |
integer | (optional) page number, default 1 |
200
| Parameter | Type | Example | Description |
|---|---|---|---|
status |
boolean | Return TRUE when success | |
message |
string | if status is FALSE then message will describe the error | |
result |
array | if status is TRUE shows list of attend | |
total |
integer | total number of attendee rows | |
page |
integer | current page number |
| curl -k -X GET "https://konto.is/api/v1/get-product-sale-attends?username=testuser&api_key=3a62cd2568635f115c975b8bd1317e3d&guid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" |
Agent API (OAuth2)
The Agent API lets trusted automation clients (MCP servers, AI assistants) perform actions on Konto on behalf of a user using OAuth2 Bearer tokens and scope-based permissions.
Overview & Flow
|
Available Scopes
| Scope | Permits |
|---|---|
nav | GET /api/v1/agent/invoices, GET /api/v1/agent/invoices/count, GET /api/v1/agent/invoices/{id}, PUT /api/v1/agent/invoices/{id}, GET /api/v1/agent/items, GET /api/v1/agent/items/count, GET /api/v1/agent/items/{id}, POST /api/v1/agent/items, PUT /api/v1/agent/items/{id} |
create_invoice | POST /api/v1/agent/invoices, POST /api/v1/agent/quotes |
recurring | POST /api/v1/agent/recurring-invoices |
manage_customers | GET /api/v1/agent/customers, GET /api/v1/agent/customers/count, POST /api/v1/agent/customers, GET /api/v1/agent/customers/{guid}, PUT /api/v1/agent/customers/{guid} |
cost | GET /api/v1/agent/costs, GET /api/v1/agent/costs/count, POST /api/v1/agent/costs, POST /api/v1/agent/costs/advanced, GET /api/v1/agent/costs/{id}, PUT /api/v1/agent/costs/{id}, DELETE /api/v1/agent/costs/{id}, POST /api/v1/agent/costs/{id}/move-to-new |
task | GET /api/v1/agent/tasks, GET /api/v1/agent/tasks/count, POST /api/v1/agent/tasks, GET /api/v1/agent/tasks/{guid}, PUT /api/v1/agent/tasks/{guid}, POST /api/v1/agent/tasks/{guid}/start, POST /api/v1/agent/tasks/{guid}/end, POST /api/v1/agent/tasks/{guid}/deactivate, POST /api/v1/agent/tasks/log, PUT /api/v1/agent/tasks/log, DELETE /api/v1/agent/tasks/log/{id}, GET /api/v1/agent/tasks/logs |
project_read | GET /api/v1/agent/projects, GET /api/v1/agent/projects/count, GET /api/v1/agent/projects/templates, GET /api/v1/agent/projects/{guid}, GET /api/v1/agent/projects/{guid}/logs |
project | Everything in project_read plus POST /api/v1/agent/projects, PUT|DELETE /api/v1/agent/projects/{guid}, POST /api/v1/agent/projects/{guid}/costs, PUT|DELETE /api/v1/agent/projects/{guid}/costs/{cost_guid}, POST /api/v1/agent/projects/{guid}/manual-costs, PUT|DELETE /api/v1/agent/projects/{guid}/manual-costs/{id}, POST /api/v1/agent/projects/{guid}/invoices, DELETE /api/v1/agent/projects/{guid}/invoices/{invoice_guid}, POST /api/v1/agent/projects/{guid}/products, PUT|DELETE /api/v1/agent/projects/{guid}/products/{id}, POST /api/v1/agent/projects/{guid}/links, DELETE /api/v1/agent/projects/{guid}/links/{related_guid} |
sell_product | GET /api/v1/agent/product-sales, GET /api/v1/agent/product-sales/count, GET /api/v1/agent/product-sales/{id}/attendees |
dashboard_data | GET /api/v1/agent/status, GET /api/v1/agent/invoice-summaries |
bookkeeper | Bookkeeper actions |
Authentication Methods
|
|
Register Agent Client
Register a new agent application. Returns client_id and, on creation or rotation, client_secret. Store the secret securely — it is returned only once, on creation or rotation, and cannot be retrieved later.
Idempotent. The identity key is (user, name, redirect_uri). Calling register again with the same key does not create a duplicate client and does not return a secret — it returns the existing client_id with "existing": true and "client_secret": null. To replace a lost secret, send "rotate_secret": true; this invalidates the old secret immediately for future /agent/token calls while leaving already-issued access/refresh tokens valid.
Per environment. Clients are scoped to the environment they were registered in — a client registered on dev.konto.is does not exist on konto.is, and vice versa.
Authentication (any one of): session cookie (web UI), HTTP Basic auth base64(username:api_key), or username + api_key in the JSON body (shown below).
/agent/register
| Parameter | Type | Required | Description |
|---|---|---|---|
username | string | Yes* | Konto username (owner). *Required only for the body-credential auth mode; omit when using a session cookie or Basic auth. |
api_key | string | Yes* | Konto API key. *See note on username. |
name | string | Yes | Human-readable agent name (part of the idempotency key) |
description | string | No | Short description |
redirect_uri | string | Yes | OAuth2 callback URL — must be https:// (part of the idempotency key) |
rotate_secret | boolean | No | Default false. When true and the client already exists, generates a new secret and invalidates the old one. |
|
|
Exchange Code for Bearer Token
Exchange the auth_code for a Bearer token (valid 1 day) and a refresh token (valid 30 days). Use the access token in the Authorization header for all subsequent API calls. When it expires, use the refresh token to get a new pair without user re-consent.
/agent/token
| Parameter | Type | Required | Description |
|---|---|---|---|
grant_type | string | Yes | Must be authorization_code |
client_id | string | Yes | Your agent's client_id |
client_secret | string | Yes | Your agent's client_secret |
code | string | Yes | auth_code from the consent redirect |
|
|
Refresh Access Token
When the access token expires, use the refresh_token to get a new access token + refresh token pair. No user re-consent required. The old refresh token is immediately invalidated.
/agent/token
| Parameter | Type | Required | Description |
|---|---|---|---|
grant_type | string | Yes | Must be refresh_token |
client_id | string | Yes | Your agent's client_id |
client_secret | string | Yes | Your agent's client_secret |
refresh_token | string | Yes | refresh_token from previous token response |
|
POST /api/v1/agent/invoices — Create Invoice
Requires scope create_invoice. Accepts the same body parameters as createInvoice.
https://konto.is/api/v1/agent/invoices
|
POST /api/v1/agent/quotes — Create Quote
Requires scope create_invoice. Same body as createInvoice; automatically sets system_type=quote.
https://konto.is/api/v1/agent/quotes
|
POST /api/v1/agent/costs — Register Cost
Requires scope cost. Accepts the same body parameters as createCost.
https://konto.is/api/v1/agent/costs
|
POST /api/v1/agent/costs/{id}/move-to-new — Move Cost to New
Requires scope cost. Re-opens an approved (Created) cost for editing by resetting it back to the New state; re-approving it afterwards regenerates its XML. This is the API equivalent of the "move to New" action in the UI. Only a cost that is approved and not yet Posted can be moved — otherwise the call fails.
https://konto.is/api/v1/agent/costs/{id}/move-to-new
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Cost GUID, passed as a URL path segment |
200
| Field | Type | Description |
|---|---|---|
status | boolean | true on success |
result | string | GUID of the cost that was moved back to New |
|
|
POST /api/v1/agent/tasks — Create Task
Requires scope task. Creates a new task. The data field is a JSON-encoded task object.
https://konto.is/api/v1/agent/tasks
| Parameter | Type | Required | Description |
|---|---|---|---|
data | string (JSON) | Yes | JSON-encoded task object (see Task detail) |
|
/api/v1/agent/projects… — Projects
Requires scope project (writes) or project_read (reads); the account needs the Projects add-on. Each route forwards to the legacy action documented under Project with the same parameters — path segments are the guid / cost_guid / invoice_guid / related_guid / id the action reads, and data is the JSON object (as a string, or as a nested object when the body is application/json). Idempotency-Key, version, external_ref, updated_since and cursor work exactly as on the legacy actions.
| Method and path | Legacy action |
|---|---|
| GET /api/v1/agent/projects | get-projects |
| POST /api/v1/agent/projects | create-project |
| GET /api/v1/agent/projects/count | get-count-projects |
| GET /api/v1/agent/projects/templates | get-project-templates |
| GET /api/v1/agent/projects/{guid} | get-project |
| PUT /api/v1/agent/projects/{guid} | update-project |
| DELETE /api/v1/agent/projects/{guid} | delete-project |
| GET /api/v1/agent/projects/{guid}/logs | get-project-logs |
| POST /api/v1/agent/projects/{guid}/costs | link-project-cost |
| PUT /api/v1/agent/projects/{guid}/costs/{cost_guid} | update-project-cost |
| DELETE /api/v1/agent/projects/{guid}/costs/{cost_guid} | unlink-project-cost |
| POST /api/v1/agent/projects/{guid}/manual-costs | create-project-manual-cost |
| PUT /api/v1/agent/projects/{guid}/manual-costs/{id} | update-project-manual-cost |
| DELETE /api/v1/agent/projects/{guid}/manual-costs/{id} | delete-project-manual-cost |
| POST /api/v1/agent/projects/{guid}/invoices | link-project-invoice |
| DELETE /api/v1/agent/projects/{guid}/invoices/{invoice_guid} | unlink-project-invoice |
| POST /api/v1/agent/projects/{guid}/products | add-project-product |
| PUT /api/v1/agent/projects/{guid}/products/{id} | update-project-product |
| DELETE /api/v1/agent/projects/{guid}/products/{id} | remove-project-product |
| POST /api/v1/agent/projects/{guid}/links | link-projects |
| DELETE /api/v1/agent/projects/{guid}/links/{related_guid} | unlink-projects |
| PUT /api/v1/agent/tasks/{guid} | update-task (scope task) |
| GET /api/v1/agent/tasks/logs | get-task-logs (scope task) |
|
POST /api/v1/agent/tasks/log — Log Work on Task
Requires scope task. Logs hours/work against an existing task identified by guid.
https://konto.is/api/v1/agent/tasks/log
| Parameter | Type | Required | Description |
|---|---|---|---|
guid | string | Yes | Task GUID (returned from createTask) |
qty | float | Yes | Hours worked (e.g. 1.5) |
date | string | No | Work date (d.m.Y format, defaults to today) |
adv | bool | No | Advanced log mode |
h | string | No | Start hour (HH:MM) |
p | string | No | End hour (HH:MM) |
|
GET /api/v1/agent/status — Account Status
Requires scope dashboard_data. Returns the authenticated account's company name, registration number, and username.
https://konto.is/api/v1/agent/status
200
| Field | Type | Description |
|---|---|---|
company_name | string | Registered company name for this account |
registration_no | string | Company kennitala (registration number) |
username | string | Konto username of the authenticated user |
|
GET /api/v1/agents — List Authorized Agents
Returns all agents the authenticated user has granted access to.
https://konto.is/api/v1/agents
|
POST /api/v1/agents — Grant Scopes to Agent
Programmatically grant scopes to an agent (alternative to the consent page flow).
https://konto.is/api/v1/agents
| Parameter | Type | Required | Description |
|---|---|---|---|
client_id | string | Yes | Agent's client_id to authorize |
scopes | array/string | Yes | Array or comma-separated scope list |
|
DELETE /api/v1/agents/{agent_id} — Revoke Agent
Revokes an agent's delegation and all its Bearer tokens.
https://konto.is/api/v1/agents/{agent_id}
|
GET /api/v1/agent/audit — Agent Audit Log
Returns a paginated log of all agent API calls made on behalf of the authenticated user.
https://konto.is/api/v1/agent/audit
| Parameter | Type | Default | Description |
|---|---|---|---|
agent_id | string | — | Filter by specific agent (optional) |
limit | int | 50 | Max records (1–200) |
page | int | 1 | Page number |
|
GET /api/v1/agent/customers — Search Customers by Kennitala
Requires scope manage_customers. Searches your customers by kennitala (registration number). Use this before creating an invoice to check whether a customer profile already exists and retrieve its GUID.
https://konto.is/api/v1/agent/customers
| Parameter | Type | Required | Description |
|---|---|---|---|
kennitala | string | Yes | Kennitala (or partial) to search for |
limit | int | No | Items per page (defaults to all) |
page | int | No | Page number (default 1) |
|
POST /api/v1/agent/customers — Create Customer
Requires scope manage_customers. Creates a new customer profile and returns its GUID. Send customer fields as a flat JSON object or nested under a data key.
https://konto.is/api/v1/agent/customers
| Field | Type | Required | Description |
|---|---|---|---|
kennitala | string | Yes | Registration number (10 digits) |
name | string | Yes | Customer name |
output_select | int | Yes | 2 = XML e-invoice, 3 = Email, 4 = PDF only |
lang | string | Yes | is or en |
currency | string | Yes | e.g. ISK, EUR, USD |
email | string | Required when output_select ≠ 4 | Customer email address |
trading_partner_id | string | Required when output_select = 2 | E-invoice routing ID |
address | string | No | Street address |
zip | string | No | Postal code |
city | string | No | City |
phone_number | string | No | Phone number |
vat | string | No | VAT number |
due_date | int | No | Default due date offset in days (default 3) |
settlement_date | int | No | Default settlement date offset in days (default 7) |
tax_exempt | bool | No | Exempt from VAT |
|
GET /api/v1/agent/customers/{guid} — Get Customer
Requires scope manage_customers. Returns the full Customer Object for the given GUID.
https://konto.is/api/v1/agent/customers/{guid}
|
PUT /api/v1/agent/customers/{guid} — Update Customer
Requires scope manage_customers. Updates an existing customer. Send only the fields you want to change. Same body format as POST /customers.
https://konto.is/api/v1/agent/customers/{guid}
|
action_id — Async Action Tracking
Every agent API call returns an action_id. Use it to confirm the operation status.
|