Menu

API kapitler

> Introduktion

> HTTP requests

> Account_API()

> Account_API->get()

> Account_API->put()

> Account_API->insert_bulk()

> Account_API->delete()

> Account_API->action()

> Account_API->upload_voucher()

> Account_API->document()

> Account_API->report()

> Tables

> Actions

> Reports

> Webhooks

Introduktion

Dynaccount API'et tillader klienter at oprette, ændre, hente eller slette ressourcer via standard HTTP request metoder, og nuværende API version er v5.

Dynaccount økonomisystem kan integreres i alt software som kan kommunikere via HTTP, og det vil i dag sige næsten alt software.

Du kan downloade et Dynaccount API vi har udviklet, som er direkte klar til brug. Det er til PHP og kan findes under Download

Keep-Alive connection

For at opnå bedst performance med API'et, skal den samme TCP forbindelse genbruges til alle requests, så der ikke foretages SSL handshake og DNS lookup ved hver enkelt request, hvilket er ressourcekrævende.

SSL handshake og DNS lookup tager ca. 200 ms og de efterfølgende requests ca. 70 ms.

Hvis du skal foretage to requests og begge oprettes i hver sin TCP forbindelse vil tiden være ca. 200+70ms og 200+70ms (540ms i alt), hvor imod hvis samme TCP forbindelse genbruges vil tiden kun være ca. 200+70+70ms (340ms i alt).

HTTP keep-alive request/response headers

Encoding

Tekststrenge er UTF-8 encoded, og alle HTTP requests er application/x-www-form-urlencoded, så POST og GET variabler skal være URL encoded.

Sikkerhed

Al kommunikation mellem Dynaccount og klienten er sikret via en 256 bit krypteret SSL Thawte certificeret forbindelse.

HTTP requests

For at få adgang til ressourcerne i API'et kræves at du har to nøgler og et ID, som valideres på ved hver request. Alle tre variabler kan findes under "Administration > Virksomheder" på https://secure.dynaccount.com

API_ID Identifikation som er unikt for hvert regnskab
API_KEY 40 cifret SHA-1 kalkuleret nøgle
API_SECRET  40 cifret hemmelig SHA-1 kalkuleret nøgle

Hvis du ikke har mulighed for at eksekvere PHP og derfor ikke kan bruge vores færdige API, så skal du foretage alle HTTP requests manuelt:

HTTP get
HTTP put
HTTP insert_bulk
HTTP delete
HTTP action
HTTP document
HTTP report

Account_API()

Du kan downloade et script udviklet i PHP til at foretage alle requests til API'et.

Eksempel

Hent alle momskoder i et regnskab.

PHP kode:

try{
	require_once 'Dynaccount_account_API.php';
	$Dyn = new Dynaccount\Account_API($api_id, $api_key, $api_secret);
	$Dyn->connect();
	$id = 0;
	$select = array();
	$where = array();
	$order = array();
	$limit = '';
	$result = $Dyn->get('vatcode', $id, $select, $where, $order, $limit);
	print_r($result);
	$Dyn->disconnect();
}
catch(Dynaccount\Exception $e){
	echo 'Error: '.$e->getMessage();
}

PHP kode sender HTTP request:

POST /v5/API_ID/API_KEY/get/vatcode/json/ HTTP/1.1
Host: api.dynaccount.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
Accept-encoding: gzip, deflate
Connection: keep-alive

__api_hash=58ea269911777b0ac911a9e74f510018c7a37877

PHP kode modtager HTTP response:

HTTP/1.1 200 OK
Date: Thu, 13 Nov 2014 18:50:49 GMT
Server: nginx
Content-Length: 1139
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json

{
	"result" : [
		{
			"id" : 8806,
			"account_id_" : 16640,
			"account_name" : "EU k\u00f8b",
			"accountoff_id_" : 16630,
			"accountoff_name" : "EU salg",
			"name" : "EI25",
			"type" : "NET",
			"percent" : 25,
			"deduction_percent" : 100,
			"txt" : "EU k\u00f8b"
		},
		{
			"id" : 8807,
			"account_id_" : 16630,
			"account_name" : "EU salg",
			"accountoff_id_" : 16640,
			"accountoff_name" : "EU k\u00f8b",
			"name" : "EU25",
			"type" : "NET",
			"percent" : 25,
			"deduction_percent" : 100,
			"txt" : "EU salg"
		},
		{
			"id" : 8808,
			"account_id_" : 16610,
			"account_name" : "K\u00f8bsmoms",
			"accountoff_id_" : "",
			"accountoff_name" : "",
			"name" : "I25",
			"type" : "GROSS",
			"percent" : 25,
			"deduction_percent" : 100,
			"txt" : "Indg\u00e5ende moms (K\u00f8bsmoms)"
		},
		{
			"id" : 8809,
			"account_id_" : 16610,
			"account_name" : "K\u00f8bsmoms",
			"accountoff_id_" : "",
			"accountoff_name" : "",
			"name" : "REP",
			"type" : "GROSS",
			"percent" : 25,
			"deduction_percent" : 25,
			"txt" : "Repr\u00e6sentation"
		},
		{
			"id" : 8810,
			"account_id_" : 16620,
			"account_name" : "Salgsmoms",
			"accountoff_id_" : "",
			"accountoff_name" : "",
			"name" : "U25",
			"type" : "GROSS",
			"percent" : 25,
			"deduction_percent" : 100,
			"txt" : "Udg\u00e5ende moms (Salgsmoms)"
		}
	],
	"metadata" : {
		"page" : 1,
		"offset" : 5,
		"num" : 5,
		"order" : "name",
		"request_time" : 0.0065009593963623
	}
}

Account_API()

I klassen Account_API() er der nogle metoder, der enten giver adgang til at oprette, hente eller slette ressourcer.

Account_API->get()

Henter en ressource.

try{
	require_once 'Dynaccount_account_API.php';
	$Dyn = new Dynaccount\Account_API($api_id, $api_key, $api_secret);
	
	/*
	*	Opret forbindelse
	*/
	$Dyn->connect();
	
	/*
	*	Resourcen der skal laves adgang til
	*/
	$table = 'vatcode';
	
	/*
	*	Hvis en specifik række skal hentes, skal id angives
	*/
	$id = 0;
	
	/*
	*	Hvis specifikke felter skal hentes
	*	eks.	$select = array('name','percent');
	*/
	$select = array();
	
	/*
	*	Hvis rækker skal hentes efter betingelser
	*	eks.	$where = array('account_id_' => 14620);
	*/
	$where = array();
	
	/*
	*	Hvis rækker skal hentes efter sortering
	*	eks.	$order = array('name DESC');
	*/
	$order = array();
	
	/*
	*	Hvis rækker skal begrænses
	*	eks.	$limit = '0,10';
	*/
	$limit = '';
	
	$result = $Dyn->get($table, $id, $select, $where, $order, $limit);
	print_r($result);
	
	/*
	*	Luk forbindelse
	*/
	$Dyn->disconnect();
}
catch(Dynaccount\Exception $e){
	echo 'Error: '.$e->getMessage();
}

Account_API->put()

Opretter eller ændrer en ressource.

try{
	require_once 'Dynaccount_account_API.php';
	$Dyn = new Dynaccount\Account_API($api_id, $api_key, $api_secret);
	
	/*
	*	Opret forbindelse
	*/
	$Dyn->connect();
	
	/*
	*	Resourcen der skal oprettes/ændres
	*/
	$table = 'account';
	
	/*
	*	Hvis en række skal ændres, skal det specifikke id angives, ellers oprettes en ny
	*/
	$id = 0;
	
	/*
	*	Felter som skal oprettes/ændres
	*/
	$fields = array(
		'account_id_'       => 1110,
		'name'              => utf8_encode('Kontonavn'),
		'type'              => 'BALANCE',
		'is_monitored'      => 'NO',
		'vatcode_name'      => '',
		'sum_account_id_'   => '',
		'ref_currency_name' => utf8_encode('dkk'),
		'is_dimension'      => 'NO'
	);
	
	$result = $Dyn->put($table, $id, $fields);
	print_r($result);
	
	/*
	*	Luk forbindelse
	*/
	$Dyn->disconnect();
}
catch(Dynaccount\Exception $e){
	echo 'Error: '.$e->getMessage();
}

Account_API->insert_bulk()

Opretter flere ressourcer.

try{
	require_once 'Dynaccount_account_API.php';
	$Dyn = new Dynaccount\Account_API($api_id, $api_key, $api_secret);
	
	/*
	*	Opret forbindelse
	*/
	$Dyn->connect();
	
	/*
	*	Resourcen der skal oprettes/ændres
	*/
	$table = 'account';
	
	/*
	*	Rækker som skal oprettes
	*/
	$rows = array(
		array(
			'account_id_'       => 1110,
			'name'              => utf8_encode('Kontonavn'),
			'type'              => 'BALANCE',
			'is_monitored'      => 'NO',
			'vatcode_name'      => '',
			'sum_account_id_'   => '',
			'ref_currency_name' => utf8_encode('dkk'),
			'is_dimension'      => 'NO'
		),
		array(
			'account_id_'       => 1111,
			'name'              => utf8_encode('Kontonavn 2'),
			'type'              => 'BALANCE',
			'is_monitored'      => 'NO',
			'vatcode_name'      => '',
			'sum_account_id_'   => '',
			'ref_currency_name' => utf8_encode('dkk'),
			'is_dimension'      => 'NO'
		)
	);
	
	$result = $Dyn->insert_bulk($table, $rows);
	print_r($result);
	
	/*
	*	Luk forbindelse
	*/
	$Dyn->disconnect();
}
catch(Dynaccount\Exception $e){
	echo 'Error: '.$e->getMessage();
}

Account_API->delete()

Sletter en ressource.

try{
	require_once 'Dynaccount_account_API.php';
	$Dyn = new Dynaccount\Account_API($api_id, $api_key, $api_secret);
	
	/*
	*	Opret forbindelse
	*/
	$Dyn->connect();
	
	/*
	*	Resourcen der skal slettes
	*/
	$table = 'account';
	
	/*
	*	Rækken som skal slettes
	*/
	$id = 180664;
	
	$result = $Dyn->delete($table, $id);
	print_r($result);
	
	/*
	*	Luk forbindelse
	*/
	$Dyn->disconnect();
}
catch(Dynaccount\Exception $e){
	echo 'Error: '.$e->getMessage();
}

Account_API->action()

Udfører anden operation.

try{
	require_once 'Dynaccount_account_API.php';
	$Dyn = new Dynaccount\Account_API($api_id, $api_key, $api_secret);
	
	/*
	*	Opret forbindelse
	*/
	$Dyn->connect();
	
	/*
	*	Operation som skal udføres
	*/
	$action = 'send_debtor_invoice';
	
	/*
	*	Parametre i operationen
	*/
	$params = array(
		'invoice_id'  => 177,
		'is_attached' => 'NO',
		'email'       => 'alias@domain.com',
		'msg'         => 'Fremsendelse af faktura'
	);
	
	$result = $Dyn->action($action, $params);
	print_r($result);
	
	/*
	*	Luk forbindelse
	*/
	$Dyn->disconnect();
}
catch(Dynaccount\Exception $e){
	echo 'Error: '.$e->getMessage();
}

Account_API->upload_voucher()

Upload bilag.

try{
	require_once 'Dynaccount_account_API.php';
	$Dyn = new Dynaccount\Account_API($api_id, $api_key, $api_secret);
	
	/*
	*	Opret forbindelse
	*/
	$Dyn->connect();
	
	/*
	*	Label på bilagene
	*/
	$label = 'test bilag';
	
	/*
	*	Filer som skal uploades
	*/
	$files = array(
		'faktura.pdf',
		'kvittering.jpg'
	);
	
	/*
	*	Navn eller email på afsender
	*/
	$from = 'Jens Jensen';
	
	$result = $Dyn->upload_voucher($label, $files, $from);
	
	/*
	*	Luk forbindelse
	*/
	$Dyn->disconnect();
}
catch(Dynaccount\Exception $e){
	echo 'Error: '.$e->getMessage();
}

Account_API->document()

Hent PDF document (Tilbud/ordre/faktura).

try{
	require_once 'Dynaccount_account_API.php';
	$Dyn = new Dynaccount\Account_API($api_id, $api_key, $api_secret);
	
	/*
	*	Opret forbindelse
	*/
	$Dyn->connect();
	
	/*
	*	Dokument ('invoice', 'order', 'quote')
	*/
	$document = 'invoice';
	
	/*
	*	Fakturanr.
	*/
	$document_id_ = 1033;
	
	/*
	*	Ved succes returneres svaret med application/pdf som en PDF stream
	*	Ved fejl returneres svaret med application/json
	*/
	$pdf_stream = $Dyn->document($document, $document_id_);
	
	/*
	*	Luk forbindelse
	*/
	$Dyn->disconnect();
}
catch(Dynaccount\Exception $e){
	echo 'Error: '.$e->getMessage();
}

Account_API->report()

Hent PDF rapport.

try{
	require_once 'Dynaccount_account_API.php';
	$Dyn = new Dynaccount\Account_API($api_id, $api_key, $api_secret);
	
	/*
	*	Opret forbindelse
	*/
	$Dyn->connect();
	
	/*
	*	Rapport
	*/
	$report = 'ledger_cards';
	
	/*
	*	Sprog
	*/
	$lang = 'da';
	
	/*
	*	Parametre i rapporten
	*/
	$params = array(
		'time_from'         => mktime(0,0,0,1,1,2016),
		'time_to'           => mktime(0,0,0,12,31,2016),
		'account_from'      => '',
		'account_to'        => '',
		'draft_entries'     => 'WITH',
		'closing_balance'   => 'ALL',
		'account_movements' => 'ALL',
		'dimension_name'    => ''
	);
	
	/*
	*	Ved succes returneres svaret med application/pdf som en PDF stream
	*	Ved fejl returneres svaret med application/json
	*/
	$pdf_stream = $Dyn->report($report, $lang, $params);
	
	/*
	*	Luk forbindelse
	*/
	$Dyn->disconnect();
}
catch(Dynaccount\Exception $e){
	echo 'Error: '.$e->getMessage();
}

Tables

Navn Beskrivelse
account -
accounting -
accounting_bank -
bank -
bank_recon -
contact -
contact_user -
creditor -
creditor_accounting_module -
creditor_group -
creditor_invoice -
creditor_invoice_match -
creditor_invoice_product -
creditor_order -
creditor_order_product -
creditor_order_product_serialno -
currency -
data_voucher -
debtor -
debtor_accounting_module -
debtor_creditnote -
debtor_creditnote_product -
debtor_creditnote_product_list -
debtor_group -
debtor_group_product_discount -
debtor_group_product_group_discount -
debtor_invoice -
debtor_invoice_match -
debtor_invoice_product -
debtor_invoice_product_list -
debtor_order -
debtor_order_product -
debtor_order_product_list -
debtor_order_product_serialno -
debtor_product_discount -
debtor_product_group_discount -
debtor_reminder -
debtor_quote -
debtor_quote_product -
debtor_quote_product_list -
debtor_subscription -
debtor_subscription_group -
debtor_subscription_group_product -
debtor_subscription_group_product_list -
debtor_subscription_product -
debtor_subscription_product_list -
dimension -
draft -
enclosure -
followup -
location -
opportunity -
payment -
product -
product_currency -
product_group -
product_list -
product_list_product -
product_supplier -
stock_adjustment -
unit -
vatcode -
year -
year_period -

Actions

Navn Beskrivelse
activate_debtor_subscription Aktiver debitorabonnement
activate_debtor_subscription_group Aktiver debitorabonnementgruppe
approve_creditor_order Godkend kreditorordre
approve_debtor_order Godkend debitorordre
attach_transaction Tilknyt banktransaktion til bilag (enclosure)
attach_voucher Tilknyt bilag (data_voucher) til bilag (enclosure)
book_creditor_invoice Bogfør kreditorfaktura
book_debtor_invoice Bogfør debitorfaktura
book_draft Bogfør bogføringskladde
charge_subscription_group Opkræv debitorabonnementgruppe
close_year Afslut regnskabsår
complete_followup Udført opfølgning
convert_currency Hent valutakurs
credit_debtor_invoice Krediter debitorfaktura (kreditnota)
deactivate_debtor_subscription Deaktiver debitorabonnement
deactivate_debtor_subscription_group Deaktiver debitorabonnementgruppe
delete_reminder Slet rykker
detach_voucher Fraknyt bilag (data_voucher)
disapprove_creditor_order Annuller godkendelse af kreditorordre
disapprove_debtor_order Annuller godkendelse af debitorordre
empty_draft Tøm bogføringskladde
get_next_enc_id_ Hent næste bilagsnummer
get_next_module_id_ Hent næste debitor-/kreditornummer
incomplete_followup Annuller udført opfølgning
invoice_creditor_order Fakturer kreditorordre
invoice_debtor_order Fakturer debitorordre
reopen_year Genåben regnskabsår
send_creditor_order Send kreditorordre
send_debtor_account_statements Send debitor kontoudtog
send_debtor_creditnote Send debitorkreditnota
send_debtor_creditnote_ean Send EAN debitorkreditnota
send_debtor_invoice Send debitorfaktura
send_debtor_invoice_ean Send EAN debitorfaktura
send_debtor_order Send debitorordre
send_debtor_quote Send debitortilbud
send_debtor_reminder Send rykker
set_opportunity_status Ændre salgsmulighed status
transfer_quote_order Overfør debitortilbud til debitorordre

Reports

Navn Beskrivelse
ledger_balance -
ledger_cards -
module_ledger_balance -
module_ledger_cards -
module_turnover -

Webhooks

Under "Administration > API webhooks" kan du oprette webhooks på metoderne put (insert/update), delete og action. Når du opretter en webhook, angiver du en URL, som Dynaccount requester hver gang den pågældende put, delete eller action bliver triggered i regnskabsprogrammet.

Du kan f.eks. oprette en webhook på nye posteringer. Når en ny postering oprettes, så requester Dynaccount den brugerdefinerede URL.

HTTP request (webhook)

POST /url-to-your-webhook/ HTTP/1.1
Host: yourserver.com
Accept-Encoding: gzip, deflate
X-Hash: e0d93a4f73a6f24a10472e41ba000eef7798ee2a
Content-Type: application/json
Content-Length: 320

{
	"method" : "insert",
	"table" : "accounting",
	"result" : {
		...
	}
}

Verificering af HTTP request (webhook)

Du kan verficere webhook requesten fra Dynaccount via headeren X-Hash.

$api_secret         = '1a567002a392d359b7626237e7a4e25197482e3e';
$url                = 'yourserver.com/url-to-your-webhook/';

$hash_verification  = sha1( $url . $json_post . $api_secret );

if($hash_verification == $header_x_hash){
	echo "Webhook request verificeret og godkendt";
}
else{
	echo "Fejl: Webhook requesten kunne ikke verificeres";
}