Der erste illegale nicht offizielle Papierkram-Client für die Papierkram-API für NodeJS.
🚧 🛠️ Dieses Projekt befindet sich noch in der Entwicklung und ist eher noch nicht für die Verwendung geeignet. 🛠️ 🚧
Aber du kannst es gerne ausprobieren und mir Feedback geben.
Hier geht es zu den offiziellen API Docs .
Schau bitte dort um alle Rückgabefelder/-werte zu checken, bis ich die Dokumentation hier komplett habe.
Dieser Client benötigt NodeJS 16+ .
Denn wer Node v14.x benutzt sollte nicht noch mit neuen Packages dafür belohnt werden 🤡
🚨 In Kürze wird es eine neue Version geben, mit mehr tests, allen Endpunkten und einer ausführlichen Dokumentation. 🤞
Ich bin eigentlich Ruby-Entwickler und habe mich entschieden, diesen Client in NodeJS zu schreiben, um mich nach einer langen Zeit mal wieder mit JavaScript zu beschäftigen. 😅
Siehe Papierkram API Client für Ruby .
Aktuell unterstützte Endpunkte / Objekte:
🚨 global noch kein Support für PDF-Downloads. 🚨
npm install papierkram-api-client
alle Verbindungen zu Endpunkten sind so gestaltet, dass du Config-Optionen übergeben kannst.
Beispiele für Config-Optionen entsprechen den Parametern, die du in der Papierkram-API-Dokumentation findest.
client . v1 . banking . bankConnection
. all ( { page : 2 , pageSize : 50 } )
. then ( ( bankConnections , err ) => {
console . log ( bankConnections . status ) ;
console . log ( bankConnections . headers ) ;
console . log ( bankConnections . body ) ;
console . log ( bankConnections . remainingQuota ) ;
} ) ;
oder:
// async/await
await const { headers, body } = client . v1 . banking . incomeInvoice . all ( {
page : 2 ,
pageSize : 50 ,
orderBy : "total_net" ,
orderDirection : "desc"
} ) ;
// promise syntax
const PapierkramApiClient = require ( "papierkram-api-client" ) ;
const client = new PapierkramApiClient ( "deine-subdomain" , "DEIN-API_KEY" ) ;
client . v1 . incomeInvoice . all ( ) . then ( ( invoices , err ) => {
console . log ( invoices ) ;
console . log ( invoices . status ) ;
console . log ( invoices . headers ) ;
console . log ( invoices . body ) ;
console . log ( invoices . remainingQuota ) ;
} ) ;
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " invoice" ,
"id" : 539 ,
"name" : " My invoice" ,
"description" : " Notes for the invoice" ,
"document_date" : " 2020-05-01" ,
"due_date" : " 2020-05-31" ,
"supply_date" : " 2023-04-04 10:14:22 +0200" ,
"customer_no" : null ,
"invoice_no" : " R-INC" ,
"sent_on" : null ,
"sent_via" : null ,
"sent_to" : null ,
"paid_at_date" : null ,
"state" : " paid" ,
"record_state" : " active" ,
"custom_template" : null ,
"total_net" : 200 ,
"total_vat" : 26 ,
"total_gross" : 226 ,
"billing" : {
"company" : " Mustermann Automobile GmbH" ,
"email" : null ,
"ust_idnr" : " 11/234/34567" ,
"street" : " Dotzheimer Str. 36" ,
"zip" : " 65185" ,
"city" : " Wiesbaden" ,
"country" : " Deutschland" ,
"contact_person" : " John Doe" ,
"department" : " Purchasing"
}
},
{
"type" : " invoice" ,
"id" : 540 ,
"name" : null ,
"description" : null ,
"document_date" : " 2023-04-04" ,
"due_date" : " 2023-04-04" ,
"supply_date" : " 2023-04-04 10:14:22 +0200" ,
"customer_no" : null ,
"invoice_no" : " R-INC" ,
"sent_on" : null ,
"sent_via" : null ,
"sent_to" : null ,
"paid_at_date" : null ,
"state" : " paid" ,
"record_state" : " active" ,
"custom_template" : null ,
"total_net" : 0 ,
"total_vat" : 0 ,
"total_gross" : 0 ,
"billing" : {
"company" : " Mustermann Automobile GmbH" ,
"email" : null ,
"ust_idnr" : null ,
"street" : " Dotzheimer Str. 36" ,
"zip" : " 65185" ,
"city" : " Wiesbaden" ,
"country" : " Deutschland" ,
"contact_person" : " Max Mustermann" ,
"department" : null
}
}
]
}
Banking::BankConnection (Bankverbindungen)
client . v1 . bankConnection . all ( { } ) . then ( ( bankConnections , err ) => {
console . log ( bankConnections ) ;
} ) ;
Parameter
Typ
Beschreibung
page
Integer
Seite
pageSize
Integer
Anzahl der Elemente pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierungsrichtung
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " bank_connection" ,
"id" : 464 ,
"name" : " Standard"
},
{
"type" : " bank_connection" ,
"id" : 465 ,
"name" : " Testbank"
}
]
}
Eine bestimmte Bankverbindung
client . v1 . bankConnection . by ( { id : 464 } ) . then ( ( bankConnection , err ) => {
console . log ( bankConnection ) ;
} ) ;
Parameter
Typ
Beschreibung
id
Integer
ID
Beispielantwort für `body`
{
"type" : " bank_connection" ,
"id" : 466 ,
"name" : " Testbank" ,
"account_no" : " 1234" ,
"account_type" : " bank" ,
"bic" : " TESTDE88XXX" ,
"blz" : null ,
"connection_type" : null ,
"created_at" : " 2023-04-04T10:14:14.000+02:00" ,
"customer_id" : null ,
"hbci" : null ,
"hbci_host_url" : null ,
"hbci_version" : null ,
"primary" : null ,
"title" : " " ,
"updated_at" : " 2023-04-04T10:14:14.000+02:00" ,
"user_id" : null ,
"iban" : " DE62780708726552844215"
}
Banking::BankTransaction (Banktransaktionen)
client . v1 . bankTransaction . all ( ) . then ( ( bankTransactions , err ) => {
console . log ( bankTransactions ) ;
} ) ;
Parameter
Typ
Beschreibung
page
Integer
Seite
pageSize
Integer
Anzahl der Elemente pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierungsrichtung
bankConnectionId
Integer
ID der Bankverbindung
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " banking_transaction" ,
"id" : 577 ,
"state" : " imported" ,
"value" : 0 ,
"currency" : " EUR" ,
"storno" : null ,
"customerref" : null ,
"instref" : null ,
"gvcode" : null ,
"text" : null ,
"usage" : null ,
"transaction_type" : " default" ,
"sepa" : null ,
"from" : {
"bic" : null ,
"iban" : null ,
"account_no" : null ,
"blz" : null ,
"currency" : null ,
"name" : null
},
"saldo" : {
"value" : 0 ,
"currency" : " EUR" ,
"timestamp" : " 2023-04-04T10:14:14.000+02:00"
},
"primanota" : null ,
"valuta" : null ,
"bdate" : " 2023-04-04T10:14:14.000+02:00" ,
"seen" : null ,
"fintecapi_turnover_id" : null ,
"imported_at" : " 2023-04-02T10:14:14.000+02:00" ,
"created_at" : " 2023-04-04T10:14:14.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:14.000+02:00" ,
"tags" : null ,
"categories" : null ,
"bank_connection" : {
"type" : " bank_connection" ,
"id" : 1 ,
"name" : " Standard"
}
},
{
"type" : " banking_transaction" ,
"id" : 578 ,
"state" : " imported" ,
"value" : 0 ,
"currency" : " EUR" ,
"storno" : null ,
"customerref" : null ,
"instref" : null ,
"gvcode" : null ,
"text" : null ,
"usage" : null ,
"transaction_type" : " default" ,
"sepa" : null ,
"from" : {
"bic" : null ,
"iban" : null ,
"account_no" : null ,
"blz" : null ,
"currency" : null ,
"name" : null
},
"saldo" : {
"value" : 0 ,
"currency" : " EUR" ,
"timestamp" : " 2023-04-04T10:14:14.000+02:00"
},
"primanota" : null ,
"valuta" : null ,
"bdate" : " 2023-04-04T10:14:14.000+02:00" ,
"seen" : null ,
"fintecapi_turnover_id" : null ,
"imported_at" : " 2023-04-02T10:14:14.000+02:00" ,
"created_at" : " 2023-04-04T10:14:14.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:14.000+02:00" ,
"tags" : null ,
"categories" : null ,
"bank_connection" : {
"type" : " bank_connection" ,
"id" : 1 ,
"name" : " Standard"
}
}
]
}
Eine bestimmte Banktransaktion
client . v1 . bankTransaction . by ( { id : 464 } ) . then ( ( bankTransaction , err ) => {
console . log ( bankTransaction ) ;
} ) ;
Parameter
Typ
Beschreibung
id
Integer
ID
Beispielantwort für `body`
{
"type" : " banking_transaction" ,
"id" : 579 ,
"state" : " imported" ,
"value" : 0 ,
"currency" : " EUR" ,
"storno" : null ,
"customerref" : null ,
"instref" : null ,
"gvcode" : null ,
"text" : null ,
"usage" : null ,
"transaction_type" : " default" ,
"sepa" : null ,
"from" : {
"bic" : null ,
"iban" : null ,
"account_no" : null ,
"blz" : null ,
"currency" : null ,
"name" : null
},
"saldo" : {
"value" : 0 ,
"currency" : " EUR" ,
"timestamp" : " 2023-04-04T10:14:14.000+02:00"
},
"primanota" : null ,
"valuta" : null ,
"bdate" : " 2023-04-04T10:14:14.000+02:00" ,
"seen" : null ,
"fintecapi_turnover_id" : null ,
"imported_at" : " 2023-04-02T10:14:14.000+02:00" ,
"created_at" : " 2023-04-04T10:14:14.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:14.000+02:00" ,
"tags" : null ,
"categories" : null ,
"bank_connection" : {
"type" : " bank_connection" ,
"id" : 1 ,
"name" : " Standard"
}
}
Contact::Company (Unternehmen)
client . v1 . contactCompany . all ( ) . then ( ( companies , err ) => {
console . log ( companies ) ;
} ) ;
Parameter
Typ
Beschreibung
page
Integer
Seite
pageSize
Integer
Anzahl der Elemente pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierungsrichtung
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " company" ,
"id" : 4754 ,
"name" : " ACME Corp." ,
"contact_type" : " customer" ,
"supplier_no" : null ,
"customer_no" : " K-00001" ,
"email" : " contact@acme.com" ,
"phone" : " +1 555-0123" ,
"website" : " acme.com" ,
"twitter" : " therealacme" ,
"fax" : " +1 555-0124" ,
"postal_street" : " Musterstrasse 8" ,
"postal_zip" : " 12345" ,
"postal_city" : " Musterstadt" ,
"postal_country" : " Deutschland" ,
"physical_street" : " Musterstrasse 8" ,
"physical_zip" : " 12345" ,
"physical_city" : " Musterstadt" ,
"physical_country" : " Deutschland" ,
"delivery_method" : " pdf" ,
"ust_idnr" : " 11/234/34567" ,
"logo_file_name" : null ,
"logo_content_type" : null ,
"logo_file_size" : null ,
"logo_updated_at" : null ,
"bank_blz" : " 7212345" ,
"bank_institute" : " Gizmo Finances" ,
"bank_account_no" : " 1234" ,
"bank_bic" : " GENOXXX" ,
"bank_sepa_mandate_reference" : " SEPAMRK00001AC" ,
"bank_sepa_mandate_accepted" : null ,
"bank_iban" : " DE123456789" ,
"inbound_address" : " cxok" ,
"notes" : " A note about that company" ,
"record_state" : " active" ,
"flagged" : null ,
"created_at" : " 2023-04-04T10:14:14.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:14.000+02:00" ,
"color" : null
},
{
"type" : " company" ,
"id" : 4755 ,
"name" : " Mustermann Automobile GmbH" ,
"contact_type" : " supplier" ,
"supplier_no" : " L-00001" ,
"customer_no" : null ,
"email" : null ,
"phone" : null ,
"website" : null ,
"twitter" : null ,
"fax" : null ,
"postal_street" : " Dotzheimer Str. 36" ,
"postal_zip" : " 65185" ,
"postal_city" : " Wiesbaden" ,
"postal_country" : " Deutschland" ,
"physical_street" : null ,
"physical_zip" : null ,
"physical_city" : null ,
"physical_country" : " Deutschland" ,
"delivery_method" : null ,
"ust_idnr" : " BE0999999999" ,
"logo_file_name" : null ,
"logo_content_type" : null ,
"logo_file_size" : null ,
"logo_updated_at" : null ,
"bank_blz" : " 79351010" ,
"bank_institute" : " Sparkasse Bad Kissingen" ,
"bank_account_no" : " 789456123" ,
"bank_bic" : " MARKDEFFXXX" ,
"bank_sepa_mandate_reference" : " SEPAMRL00001MAG" ,
"bank_sepa_mandate_accepted" : null ,
"bank_iban" : " DE68210501700012345678" ,
"inbound_address" : " jgnf" ,
"notes" : null ,
"record_state" : " active" ,
"flagged" : null ,
"created_at" : " 2023-04-04T10:14:14.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:14.000+02:00" ,
"color" : null
}
]
}
Ein bestimmtes Unternehmen
client . v1 . contactCompany . by ( { id : 4754 } ) . then ( ( company , err ) => {
console . log ( company ) ;
} ) ;
Parameter
Typ
Beschreibung
id
Integer
ID
Beispielantwort für `body`
{
"type" : " company" ,
"id" : 4786 ,
"name" : " ACME Corp." ,
"contact_type" : " customer" ,
"supplier_no" : null ,
"customer_no" : " K-00001" ,
"email" : " contact@acme.com" ,
"phone" : " +1 555-0123" ,
"website" : " acme.com" ,
"twitter" : " therealacme" ,
"fax" : " +1 555-0124" ,
"postal_street" : " Musterstrasse 8" ,
"postal_zip" : " 12345" ,
"postal_city" : " Musterstadt" ,
"postal_country" : " Deutschland" ,
"physical_street" : " Musterstrasse 8" ,
"physical_zip" : " 12345" ,
"physical_city" : " Musterstadt" ,
"physical_country" : " Deutschland" ,
"delivery_method" : " pdf" ,
"ust_idnr" : " 11/234/34567" ,
"logo_file_name" : null ,
"logo_content_type" : null ,
"logo_file_size" : null ,
"logo_updated_at" : null ,
"bank_blz" : " 7212345" ,
"bank_institute" : " Gizmo Finances" ,
"bank_account_no" : " 1234" ,
"bank_bic" : " GENOXXX" ,
"bank_sepa_mandate_reference" : " SEPAMRK00001AC" ,
"bank_sepa_mandate_accepted" : null ,
"bank_iban" : " DE123456789" ,
"inbound_address" : " mg0h" ,
"notes" : " A note about that company" ,
"record_state" : " active" ,
"flagged" : null ,
"created_at" : " 2023-04-04T10:14:15.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:15.000+02:00" ,
"color" : null ,
"people" : {
"type" : " list" ,
"has_more" : false ,
"url" : " /api/v1/contact/companies/4786/persons" ,
"entries" : [
{
"type" : " person" ,
"id" : 1459 ,
"first_name" : " John" ,
"last_name" : " Doe"
},
{
"type" : " person" ,
"id" : 1460 ,
"first_name" : " Kevin" ,
"last_name" : " Smart"
}
]
},
"projects" : {
"type" : " list" ,
"has_more" : false ,
"url" : " /api/v1/projects?company_id=4786" ,
"entries" : [
{
"type" : " project" ,
"id" : 6268 ,
"name" : " Kein Projekt"
},
{
"type" : " project" ,
"id" : 6269 ,
"name" : " My first project"
}
]
},
"invoices" : {
"type" : " list" ,
"has_more" : false ,
"url" : " /api/v1/income/invoices?company_id=4786" ,
"entries" : []
},
"vouchers" : {
"type" : " list" ,
"has_more" : false ,
"url" : " /api/v1/expense/vouchers?company_id=4786" ,
"entries" : []
}
}
Contact::Company (Kontaktpersonen)
Alle Kontaktpersonen eines Unternehmens
client . v1 . contactCompanyPerson
. all ( { contactCompanyId : 123 } )
. then ( ( persons , err ) => {
console . log ( persons ) ;
} ) ;
Parameter
Typ
Beschreibung
contactCompanyId
Integer
ID
page
Integer
Seite
pageSize
Integer
Anzahl der Elemente pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierungsrichtung
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " person" ,
"id" : 1494 ,
"first_name" : " John" ,
"last_name" : " Doe" ,
"title" : " Prof" ,
"salutation" : " Herr" ,
"position" : " Head of department" ,
"department" : " Purchasing" ,
"phone" : " +1 555-0123" ,
"skype" : null ,
"fax" : " +1 555-0125" ,
"email" : " foo@bar.com" ,
"flagged" : null ,
"created_at" : " 2023-04-04T10:14:15.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:15.000+02:00" ,
"mobile" : " +1 555-0124" ,
"comment" : null ,
"default" : null
},
{
"type" : " person" ,
"id" : 1495 ,
"first_name" : " Max" ,
"last_name" : " Mustermann" ,
"title" : " Herr" ,
"salutation" : null ,
"position" : null ,
"department" : null ,
"phone" : " +49 111 11111" ,
"skype" : null ,
"fax" : null ,
"email" : null ,
"flagged" : null ,
"created_at" : " 2023-04-04T10:14:15.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:15.000+02:00" ,
"mobile" : null ,
"comment" : null ,
"default" : null
}
]
}
Eine Kontaktperson eines Unternehmens
client . v1 . contactCompanyPerson . by ( contactCompanyId : 321 , id : 123 ) . then ( ( person , err ) => {
console . log ( person ) ;
} ) ;
Parameter
Typ
Beschreibung
contactCompanyId
Integer
ID
id
Integer
ID
Beispielantwort für `body`
{
"type" : " person" ,
"id" : 1496 ,
"first_name" : " John" ,
"last_name" : " Doe" ,
"title" : " Prof" ,
"salutation" : " Herr" ,
"position" : " Head of department" ,
"department" : " Purchasing" ,
"phone" : " +1 555-0123" ,
"skype" : null ,
"fax" : " +1 555-0125" ,
"email" : " foo@bar.com" ,
"flagged" : null ,
"created_at" : " 2023-04-04T10:14:15.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:15.000+02:00" ,
"mobile" : " +1 555-0124" ,
"comment" : null ,
"default" : null ,
"company" : {
"type" : " company" ,
"id" : 4794 ,
"name" : " ACME Corp." ,
"contact_type" : " customer" ,
"supplier_no" : null ,
"customer_no" : " K-00001" ,
"email" : null ,
"phone" : null ,
"website" : null ,
"twitter" : null ,
"fax" : null ,
"postal_street" : " Dotzheimer Str. 36" ,
"postal_zip" : " 65185" ,
"postal_city" : " Wiesbaden" ,
"postal_country" : " Deutschland" ,
"physical_street" : null ,
"physical_zip" : null ,
"physical_city" : null ,
"physical_country" : " Deutschland" ,
"delivery_method" : null ,
"ust_idnr" : " BE0999999999" ,
"logo_file_name" : null ,
"logo_content_type" : null ,
"logo_file_size" : null ,
"logo_updated_at" : null ,
"bank_blz" : " 79351010" ,
"bank_institute" : " Sparkasse Bad Kissingen" ,
"bank_account_no" : " 789456123" ,
"bank_bic" : " MARKDEFFXXX" ,
"bank_sepa_mandate_reference" : " SEPAMRK00001AC" ,
"bank_sepa_mandate_accepted" : null ,
"bank_iban" : " DE68210501700012345678" ,
"inbound_address" : " op08" ,
"notes" : null ,
"record_state" : " active" ,
"flagged" : null ,
"created_at" : " 2023-04-04T10:14:15.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:15.000+02:00" ,
"color" : null
}
}
Expense::Voucher (Ausgabebelege)
client . v1 . expenseVoucher . all ( ) . then ( ( vouchers , err ) => {
console . log ( vouchers ) ;
} ) ;
Parameter
Typ
Beschreibung
page
Integer
Seite
pageSize
Integer
Anzahl der Elemente pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierungsrichtung
creditorId
Integer
Gläubiger
projectId
Integer
Projekt
documentDateRangeStart
Date
Startdatum der Rechnungsstellung
documentDateRangeEnd
Date
Enddatum der Rechnungsstellung
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " expense_voucher" ,
"id" : 383 ,
"name" : " My voucher" ,
"due_date" : " 2020-05-31" ,
"document_date" : " 2020-05-01" ,
"description" : " Notes for the voucher" ,
"entertainment_reason" : null ,
"flagged" : true ,
"provenance" : " domestic" ,
"voucher_no" : " B-EXP-0001" ,
"state" : " unpaid" ,
"record_state" : " active" ,
"amount" : 0 ,
"invoice_amount" : 0 ,
"entertainment_persons" : []
},
{
"type" : " expense_voucher" ,
"id" : 384 ,
"name" : " FactoryBot Ausgabebeleg B-EXP-0001" ,
"due_date" : null ,
"document_date" : " 2023-04-04" ,
"description" : null ,
"entertainment_reason" : null ,
"flagged" : null ,
"provenance" : " domestic" ,
"voucher_no" : " B-EXP-0001" ,
"state" : " unpaid" ,
"record_state" : " active" ,
"amount" : 0 ,
"invoice_amount" : 0 ,
"entertainment_persons" : []
}
]
}
Ein bestimmter Ausgabebeleg
client . v1 . expenseVoucher . by ( { id : 1 } ) . then ( ( voucher , err ) => {
console . log ( voucher ) ;
} ) ;
Parameter
Typ
Beschreibung
id
Integer
ID
Beispielantwort für `body`
{
"type" : " expense_voucher" ,
"id" : 385 ,
"name" : " Restaurant visit" ,
"due_date" : " 2020-06-30" ,
"document_date" : " 2020-06-14" ,
"description" : " Took customer for dinner." ,
"entertainment_reason" : " sales meeting" ,
"flagged" : true ,
"provenance" : " domestic" ,
"voucher_no" : " B-EXP-0001" ,
"state" : " unpaid" ,
"record_state" : " active" ,
"amount" : 165.8 ,
"invoice_amount" : 0 ,
"entertainment_persons" : [],
"creditor" : {
"type" : " company" ,
"id" : 4814 ,
"name" : " Ristorante Il Porcino" ,
"contact_type" : " supplier" ,
"supplier_no" : " L-00001" ,
"customer_no" : null ,
"email" : null ,
"phone" : null ,
"website" : null ,
"twitter" : null ,
"fax" : null ,
"postal_street" : " Dotzheimer Str. 36" ,
"postal_zip" : " 65185" ,
"postal_city" : " Wiesbaden" ,
"postal_country" : " Deutschland" ,
"physical_street" : null ,
"physical_zip" : null ,
"physical_city" : null ,
"physical_country" : " Deutschland" ,
"delivery_method" : null ,
"ust_idnr" : " BE0999999999" ,
"logo_file_name" : null ,
"logo_content_type" : null ,
"logo_file_size" : null ,
"logo_updated_at" : null ,
"bank_blz" : " 79351010" ,
"bank_institute" : " Sparkasse Bad Kissingen" ,
"bank_account_no" : " 789456123" ,
"bank_bic" : " MARKDEFFXXX" ,
"bank_sepa_mandate_reference" : " SEPAMRL00001RIP" ,
"bank_sepa_mandate_accepted" : null ,
"bank_iban" : " DE68210501700012345678" ,
"inbound_address" : " emkx" ,
"notes" : null ,
"record_state" : " active" ,
"flagged" : null ,
"created_at" : " 2023-04-04T10:14:16.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:16.000+02:00" ,
"color" : null
},
"line_items" : [
{
"name" : " restaurant bill" ,
"amount" : 150.8 ,
"category" : " Bewirtungskosten" ,
"vat_rate" : " 19%" ,
"billing" : null ,
"depreciation" : null
},
{
"name" : " tip" ,
"amount" : 15 ,
"category" : " Bewirtungskosten" ,
"vat_rate" : " 19%" ,
"billing" : null ,
"depreciation" : null
}
],
"documents" : [
{
"type" : " document" ,
"id" : 30 ,
"uri" : " http://test.odacer.com/system/attachments/1/documents/30/7e6274cdeac3ecfdd1e5c746f6378e5229ddfd0d/data/original/sample.pdf?1680596056"
}
]
}
Income::Estimate (Angebote)
client . v1 . incomeEstimate . all ( ) . then ( ( estimates , err ) => {
console . log ( estimates ) ;
} ) ;
Name
Typ
Beschreibung
page
Integer
Seite
pageSize
Integer
Anzahl der Elemente pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierrichtung
companyId
Integer
ID der Firma
projectId
Integer
ID des Projekts
documentDateRangeStart
Date
Startdatum
documentDateRangeEnd
Date
Enddatum
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " estimate" ,
"id" : 483 ,
"name" : " My estimate" ,
"description" : " Notes for the estimate" ,
"document_date" : " 2020-05-01" ,
"customer_no" : null ,
"estimate_no" : " A-INC" ,
"sent_on" : " 2023-04-04" ,
"sent_via" : null ,
"sent_to" : null ,
"state" : " accepted" ,
"record_state" : " active" ,
"custom_template" : null ,
"total_net" : 200 ,
"total_vat" : 26 ,
"total_gross" : 226 ,
"billing" : {
"company" : " Mustermann Automobile GmbH" ,
"email" : null ,
"ust_idnr" : " 11/234/34567" ,
"street" : " Dotzheimer Str. 36" ,
"zip" : " 65185" ,
"city" : " Wiesbaden" ,
"country" : " Deutschland" ,
"contact_person" : " John Doe" ,
"department" : " Purchasing"
}
},
{
"type" : " estimate" ,
"id" : 484 ,
"name" : null ,
"description" : null ,
"document_date" : " 2023-04-04" ,
"customer_no" : null ,
"estimate_no" : " A-INC" ,
"sent_on" : " 2023-04-04" ,
"sent_via" : null ,
"sent_to" : null ,
"state" : " accepted" ,
"record_state" : " active" ,
"custom_template" : null ,
"total_net" : 0 ,
"total_vat" : 0 ,
"total_gross" : 0 ,
"billing" : {
"company" : " Mustermann Automobile GmbH" ,
"email" : null ,
"ust_idnr" : null ,
"street" : " Dotzheimer Str. 36" ,
"zip" : " 65185" ,
"city" : " Wiesbaden" ,
"country" : " Deutschland" ,
"contact_person" : " Max Mustermann" ,
"department" : null
}
}
]
}
client . v1 . incomeEstimate . by ( { id : 483 } ) . then ( ( estimate , err ) => {
console . log ( estimate ) ;
} ) ;
Name
Typ
Beschreibung
id
Integer
ID
Beispielantwort für `body`
{
"type" : " estimate" ,
"id" : 485 ,
"name" : " My estimate" ,
"description" : " Notes for the estimate" ,
"document_date" : " 2020-05-01" ,
"customer_no" : null ,
"estimate_no" : " A-INC" ,
"sent_on" : " 2023-04-04" ,
"sent_via" : null ,
"sent_to" : null ,
"state" : " draft" ,
"record_state" : " active" ,
"custom_template" : null ,
"total_net" : 200 ,
"total_vat" : 26 ,
"total_gross" : 226 ,
"billing" : {
"company" : " Mustermann Automobile GmbH" ,
"email" : null ,
"ust_idnr" : " 11/234/34567" ,
"street" : " Dotzheimer Str. 36" ,
"zip" : " 65185" ,
"city" : " Wiesbaden" ,
"country" : " Deutschland" ,
"contact_person" : " John Doe" ,
"department" : " Purchasing"
},
"customer" : {
"type" : " company" ,
"id" : 4892 ,
"name" : " Mustermann Automobile GmbH" ,
"contact_type" : " customer"
},
"contact_person" : {
"type" : " person" ,
"id" : 1533 ,
"first_name" : " John" ,
"last_name" : " Doe"
},
"project" : {
"type" : " project" ,
"id" : 6365 ,
"name" : " My project"
},
"line_items" : [
{
"line_item_type" : " position" ,
"position_in_group" : null ,
"name" : " Büroartikel" ,
"description" : null ,
"quantity" : 1 ,
"unit" : " Stunde" ,
"price" : 100 ,
"vat_rate" : " 19%" ,
"total_net" : 100 ,
"proposition" : {
"type" : " proposition" ,
"id" : 875 ,
"name" : " Service" ,
"proposition_type" : " service"
}
},
{
"line_item_type" : " position" ,
"position_in_group" : null ,
"name" : " Heizung" ,
"description" : null ,
"quantity" : 1 ,
"unit" : " Stunde" ,
"price" : 100 ,
"vat_rate" : " 7%" ,
"total_net" : 100 ,
"proposition" : {
"type" : " proposition" ,
"id" : 875 ,
"name" : " Service" ,
"proposition_type" : " service"
}
}
]
}
Income::Invoice (Rechnungen)
client . v1 . incomeInvoice . all ( ) . then ( ( invoices , err ) => {
console . log ( invoices ) ;
} ) ;
Name
Typ
Beschreibung
page
Integer
Seite
pageSize
Integer
Anzahl der Elemente pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierrichtung
companyId
Integer
ID der Firma
projectId
Integer
ID des Projekts
documentDateRangeStart
String
Startdatum
documentDateRangeEnd
String
Enddatum
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " invoice" ,
"id" : 539 ,
"name" : " My invoice" ,
"description" : " Notes for the invoice" ,
"document_date" : " 2020-05-01" ,
"due_date" : " 2020-05-31" ,
"supply_date" : " 2023-04-04 10:14:22 +0200" ,
"customer_no" : null ,
"invoice_no" : " R-INC" ,
"sent_on" : null ,
"sent_via" : null ,
"sent_to" : null ,
"paid_at_date" : null ,
"state" : " paid" ,
"record_state" : " active" ,
"custom_template" : null ,
"total_net" : 200 ,
"total_vat" : 26 ,
"total_gross" : 226 ,
"billing" : {
"company" : " Mustermann Automobile GmbH" ,
"email" : null ,
"ust_idnr" : " 11/234/34567" ,
"street" : " Dotzheimer Str. 36" ,
"zip" : " 65185" ,
"city" : " Wiesbaden" ,
"country" : " Deutschland" ,
"contact_person" : " John Doe" ,
"department" : " Purchasing"
}
},
{
"type" : " invoice" ,
"id" : 540 ,
"name" : null ,
"description" : null ,
"document_date" : " 2023-04-04" ,
"due_date" : " 2023-04-04" ,
"supply_date" : " 2023-04-04 10:14:22 +0200" ,
"customer_no" : null ,
"invoice_no" : " R-INC" ,
"sent_on" : null ,
"sent_via" : null ,
"sent_to" : null ,
"paid_at_date" : null ,
"state" : " paid" ,
"record_state" : " active" ,
"custom_template" : null ,
"total_net" : 0 ,
"total_vat" : 0 ,
"total_gross" : 0 ,
"billing" : {
"company" : " Mustermann Automobile GmbH" ,
"email" : null ,
"ust_idnr" : null ,
"street" : " Dotzheimer Str. 36" ,
"zip" : " 65185" ,
"city" : " Wiesbaden" ,
"country" : " Deutschland" ,
"contact_person" : " Max Mustermann" ,
"department" : null
}
}
]
}
client . v1 . incomeInvoice
. by ( { id : 539 } )
. get ( )
. then ( ( invoice , err ) => {
console . log ( invoice ) ;
} ) ;
Name
Typ
Beschreibung
id
Integer
ID der Rechnung
Beispielantwort für `body`
{
"type" : " invoice" ,
"id" : 541 ,
"name" : " My invoice" ,
"description" : " Notes for the invoice" ,
"document_date" : " 2020-05-01" ,
"due_date" : " 2020-05-31" ,
"supply_date" : " 2023-04-04 10:14:22 +0200" ,
"customer_no" : null ,
"invoice_no" : " R-INC" ,
"sent_on" : null ,
"sent_via" : null ,
"sent_to" : null ,
"paid_at_date" : null ,
"state" : " draft" ,
"record_state" : " active" ,
"custom_template" : null ,
"total_net" : 200 ,
"total_vat" : 26 ,
"total_gross" : 226 ,
"billing" : {
"company" : " Mustermann Automobile GmbH" ,
"email" : null ,
"ust_idnr" : " 11/234/34567" ,
"street" : " Dotzheimer Str. 36" ,
"zip" : " 65185" ,
"city" : " Wiesbaden" ,
"country" : " Deutschland" ,
"contact_person" : " John Doe" ,
"department" : " Purchasing"
},
"customer" : {
"type" : " company" ,
"id" : 4972 ,
"name" : " Mustermann Automobile GmbH" ,
"contact_type" : " customer"
},
"contact_person" : {
"type" : " person" ,
"id" : 1572 ,
"first_name" : " John" ,
"last_name" : " Doe"
},
"project" : {
"type" : " project" ,
"id" : 6487 ,
"name" : " My project"
},
"line_items" : [
{
"line_item_type" : " position" ,
"position_in_group" : null ,
"name" : " Büroartikel" ,
"description" : " Beschreibung einer Rechnungsposition" ,
"quantity" : 1 ,
"unit" : " Stunde" ,
"price" : 100 ,
"vat_rate" : " 19%" ,
"total_net" : 100 ,
"proposition" : {
"type" : " proposition" ,
"id" : 883 ,
"name" : " Service" ,
"proposition_type" : " service"
}
},
{
"line_item_type" : " position" ,
"position_in_group" : null ,
"name" : " Heizung" ,
"description" : " Beschreibung einer Rechnungsposition" ,
"quantity" : 1 ,
"unit" : " Stunde" ,
"price" : 100 ,
"vat_rate" : " 7%" ,
"total_net" : 100 ,
"proposition" : {
"type" : " proposition" ,
"id" : 883 ,
"name" : " Service" ,
"proposition_type" : " service"
}
}
]
}
Income::Proposition (Waren / Dienstleistungen)
Alle Waren / Dienstleistungen
client . v1 . incomeProposition . all ( ) . then ( ( propositions , err ) => {
console . log ( propositions ) ;
} ) ;
Name
Typ
Beschreibung
page
Integer
Seite
pageSize
Integer
Anzahl der Elemente pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierrichtung
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " proposition" ,
"id" : 915 ,
"name" : " My proposition" ,
"proposition_type" : " product" ,
"description" : " Notes for the proposition" ,
"price" : " 150.0" ,
"time_unit" : " hour" ,
"unit_name_1" : " Produkt" ,
"unit_name_n" : " Produkte" ,
"record_state" : " active" ,
"flagged" : null ,
"favorite" : null ,
"created_at" : " 2023-04-04T10:14:24.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:24.000+02:00"
},
{
"type" : " proposition" ,
"id" : 916 ,
"name" : " Produkt" ,
"proposition_type" : " product" ,
"description" : " " ,
"price" : " 150.0" ,
"time_unit" : " hour" ,
"unit_name_1" : " Produkt" ,
"unit_name_n" : " Produkte" ,
"record_state" : " active" ,
"flagged" : null ,
"favorite" : null ,
"created_at" : " 2023-04-04T10:14:24.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:24.000+02:00"
}
]
}
Eine bestimmte Ware / Dienstleistung
client . v1 . incomeProposition . by ( { id : 915 } ) . then ( ( proposition , err ) => {
console . log ( proposition ) ;
} ) ;
Name
Typ
Beschreibung
id
Integer
ID der Ware / Dienstleistung
Beispielantwort für `body`
{
"type" : " proposition" ,
"id" : 917 ,
"name" : " My proposition" ,
"proposition_type" : " product" ,
"description" : " Notes for the proposition" ,
"price" : " 150.0" ,
"time_unit" : " hour" ,
"unit_name_1" : " Produkt" ,
"unit_name_n" : " Produkte" ,
"record_state" : " active" ,
"flagged" : null ,
"favorite" : null ,
"created_at" : " 2023-04-04T10:14:24.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:24.000+02:00" ,
"vat_rate" : {
"type" : " vat_rate" ,
"id" : 1 ,
"name" : " 19%" ,
"rate" : " 0.19" ,
"description" : " Regulärer Umsatzsteuersatz für Verkäufe in Deutschland" ,
"code" : " AR19P" ,
"country_code" : " de" ,
"vat_rate_type" : " ar" ,
"created_at" : " 2023-04-03T09:02:49.000+02:00" ,
"updated_at" : " 2023-04-03T09:02:49.000+02:00"
}
}
client . v1 . info . details ( ) . then ( ( info , err ) => {
console . log ( info ) ;
} ) ;
Beispielantwort für `body`
{
"api" : {
"version" : " 1.0.0"
},
"settings" : {
"custom_templates" : {
"invoices" : [
{
"type" : " template" ,
"id" : 25 ,
"name" : " Invoice type 1"
},
{
"type" : " template" ,
"id" : 26 ,
"name" : " Invoice type 2"
}
]
}
}
}
client . v1 . project . all ( ) . then ( ( projects , err ) => {
console . log ( projects ) ;
} ) ;
Name
Typ
Beschreibung
page
Integer
Seite
pageSize
Integer
Anzahl der Elemente pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierrichtung
companyId
Integer
ID der Firma
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " project" ,
"id" : 6561 ,
"name" : " My first project" ,
"description" : " This is my first project to make money." ,
"start_date" : " 2020-05-01" ,
"end_date" : " 2020-05-31" ,
"flagged" : true ,
"budget_type" : " money" ,
"budget_money" : " 50000.0" ,
"budget_time" : null ,
"budget_time_unit" : null ,
"customer_default" : false ,
"record_state" : " active" ,
"created_at" : " 2023-04-04T10:14:24.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:24.000+02:00" ,
"company_id" : 5017 ,
"color" : " blue"
},
{
"type" : " project" ,
"id" : 6563 ,
"name" : " MyProjectName" ,
"description" : null ,
"start_date" : " 9999-01-01" ,
"end_date" : " 9999-12-31" ,
"flagged" : null ,
"budget_type" : null ,
"budget_money" : null ,
"budget_time" : null ,
"budget_time_unit" : null ,
"customer_default" : false ,
"record_state" : " active" ,
"created_at" : " 2023-04-04T10:14:24.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:24.000+02:00" ,
"company_id" : 5018 ,
"color" : null
}
]
}
client . v1 . project . by ( { id : 6561 } ) . then ( ( project , err ) => {
console . log ( project ) ;
} ) ;
Name
Typ
Beschreibung
id
Integer
ID des Projekts
Beispielantwort für `body`
{
"type" : " project" ,
"id" : 6566 ,
"name" : " My first project" ,
"description" : " This is my first project to make money." ,
"start_date" : " 2020-05-01" ,
"end_date" : " 2020-05-31" ,
"flagged" : true ,
"budget_type" : " money" ,
"budget_money" : " 50000.0" ,
"budget_time" : null ,
"budget_time_unit" : null ,
"customer_default" : false ,
"record_state" : " active" ,
"created_at" : " 2023-04-04T10:14:25.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:25.000+02:00" ,
"company_id" : 5019 ,
"color" : null ,
"default_proposition" : {
"type" : " proposition" ,
"id" : 918 ,
"name" : " ACME Instant Tunnels" ,
"proposition_type" : " product" ,
"description" : " " ,
"price" : " 150.0" ,
"time_unit" : " hour" ,
"unit_name_1" : " Produkt" ,
"unit_name_n" : " Produkte" ,
"record_state" : " active" ,
"flagged" : null ,
"favorite" : null ,
"created_at" : " 2023-04-04T10:14:25.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:25.000+02:00"
},
"customer" : {
"type" : " company" ,
"id" : 5019 ,
"name" : " ACME Corp." ,
"contact_type" : " customer" ,
"supplier_no" : null ,
"customer_no" : " K-00001" ,
"email" : null ,
"phone" : null ,
"website" : null ,
"twitter" : null ,
"fax" : null ,
"postal_street" : " Dotzheimer Str. 36" ,
"postal_zip" : " 65185" ,
"postal_city" : " Wiesbaden" ,
"postal_country" : " Deutschland" ,
"physical_street" : null ,
"physical_zip" : null ,
"physical_city" : null ,
"physical_country" : " Deutschland" ,
"delivery_method" : null ,
"ust_idnr" : " BE0999999999" ,
"logo_file_name" : null ,
"logo_content_type" : null ,
"logo_file_size" : null ,
"logo_updated_at" : null ,
"bank_blz" : " 79351010" ,
"bank_institute" : " Sparkasse Bad Kissingen" ,
"bank_account_no" : " 789456123" ,
"bank_bic" : " MARKDEFFXXX" ,
"bank_sepa_mandate_reference" : " SEPAMRK00001AC" ,
"bank_sepa_mandate_accepted" : null ,
"bank_iban" : " DE68210501700012345678" ,
"inbound_address" : " fjal" ,
"notes" : null ,
"record_state" : " active" ,
"flagged" : null ,
"created_at" : " 2023-04-04T10:14:24.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:24.000+02:00" ,
"color" : null
},
"team_members" : [],
"tasks" : {
"type" : " list" ,
"has_more" : false ,
"url" : " /api/v1/tracker/tasks?project_id=6566" ,
"entries" : [
{
"type" : " task" ,
"id" : 1033 ,
"name" : " My first task" ,
"project_id" : 6566
}
]
},
"invoices" : {
"type" : " list" ,
"has_more" : false ,
"url" : " /api/v1/income/invoices?project_id=6566" ,
"entries" : []
},
"vouchers" : {
"type" : " list" ,
"has_more" : false ,
"url" : " /api/v1/expense/vouchers?project_id=6566" ,
"entries" : []
}
}
const customerId = 3
client . v1 . project . create ( customerId , {
name : "My first project" ,
description : "This is my first project to make money." ,
startDate : "2020-05-01" ,
endDate : "2020-05-31" ,
flagged : false ,
budgetType : "money" ,
budgetMoney : "50000.0" ,
budgetTime : null ,
budgetTimeUnit : null ,
color : null ,
defaultPropositionId : 918 ,
teamMembers : [ { id : 1 } , { id : 2 } ] ,
} ) . then ( ( project , err ) => {
console . log ( project ) ;
} ) ;
const projectId = 3
client . v1 . project . update ( projectId , {
name : "My first project" ,
description : "This is my first project to make money." ,
startDate : "2020-05-01" ,
endDate : "2020-05-31" ,
flagged : false ,
budgetType : "money" ,
budgetMoney : "50000.0" ,
budgetTime : null ,
budgetTimeUnit : null ,
color : null ,
defaultPropositionId : 918 ,
teamMembers : [ { id : 1 } , { id : 2 } ] ,
} ) . then ( ( project , err ) => {
console . log ( project ) ;
} ) ;
Archivieren eines Projekts
const projectId = 3
client . v1 . project . archive ( projectId ) . then ( ( project , err ) => {
console . log ( project ) ;
} ) ;
Unarchivieren eines Projekts
const projectId = 3
client . v1 . project . unarchive ( projectId ) . then ( ( project , err ) => {
console . log ( project ) ;
} ) ;
const projectId = 3
client . v1 . project . delete ( projectId ) . then ( ( project , err ) => {
console . log ( project ) ;
} ) ;
client . v1 . trackerTask . all ( ) . then ( ( tasks , err ) => {
console . log ( tasks ) ;
} ) ;
Name
Typ
Beschreibung
page
Integer
Seite
pageSize
Integer
Anzahl der Einträge pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierrichtung
projectId
Integer
ID des Projekts
propositionId
Integer
ID der Angebot
Beispielantwort für `body`
{
"type" : " project" ,
"id" : 6566 ,
"name" : " My first project" ,
"description" : " This is my first project to make money." ,
"start_date" : " 2020-05-01" ,
"end_date" : " 2020-05-31" ,
"flagged" : true ,
"budget_type" : " money" ,
"budget_money" : " 50000.0" ,
"budget_time" : null ,
"budget_time_unit" : null ,
"customer_default" : false ,
"record_state" : " active" ,
"created_at" : " 2023-04-04T10:14:25.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:25.000+02:00" ,
"company_id" : 5019 ,
"color" : null ,
"default_proposition" : {
"type" : " proposition" ,
"id" : 918 ,
"name" : " ACME Instant Tunnels" ,
"proposition_type" : " product" ,
"description" : " " ,
"price" : " 150.0" ,
"time_unit" : " hour" ,
"unit_name_1" : " Produkt" ,
"unit_name_n" : " Produkte" ,
"record_state" : " active" ,
"flagged" : null ,
"favorite" : null ,
"created_at" : " 2023-04-04T10:14:25.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:25.000+02:00"
},
"customer" : {
"type" : " company" ,
"id" : 5019 ,
"name" : " ACME Corp." ,
"contact_type" : " customer" ,
"supplier_no" : null ,
"customer_no" : " K-00001" ,
"email" : null ,
"phone" : null ,
"website" : null ,
"twitter" : null ,
"fax" : null ,
"postal_street" : " Dotzheimer Str. 36" ,
"postal_zip" : " 65185" ,
"postal_city" : " Wiesbaden" ,
"postal_country" : " Deutschland" ,
"physical_street" : null ,
"physical_zip" : null ,
"physical_city" : null ,
"physical_country" : " Deutschland" ,
"delivery_method" : null ,
"ust_idnr" : " BE0999999999" ,
"logo_file_name" : null ,
"logo_content_type" : null ,
"logo_file_size" : null ,
"logo_updated_at" : null ,
"bank_blz" : " 79351010" ,
"bank_institute" : " Sparkasse Bad Kissingen" ,
"bank_account_no" : " 789456123" ,
"bank_bic" : " MARKDEFFXXX" ,
"bank_sepa_mandate_reference" : " SEPAMRK00001AC" ,
"bank_sepa_mandate_accepted" : null ,
"bank_iban" : " DE68210501700012345678" ,
"inbound_address" : " fjal" ,
"notes" : null ,
"record_state" : " active" ,
"flagged" : null ,
"created_at" : " 2023-04-04T10:14:24.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:24.000+02:00" ,
"color" : null
},
"team_members" : [],
"tasks" : {
"type" : " list" ,
"has_more" : false ,
"url" : " /api/v1/tracker/tasks?project_id=6566" ,
"entries" : [
{
"type" : " task" ,
"id" : 1033 ,
"name" : " My first task" ,
"project_id" : 6566
}
]
},
"invoices" : {
"type" : " list" ,
"has_more" : false ,
"url" : " /api/v1/income/invoices?project_id=6566" ,
"entries" : []
},
"vouchers" : {
"type" : " list" ,
"has_more" : false ,
"url" : " /api/v1/expense/vouchers?project_id=6566" ,
"entries" : []
}
}
client . v1 . trackerTasks . by ( { id : 11 } ) . then ( ( tasks , err ) => {
console . log ( tasks ) ;
} ) ;
Name
Typ
Beschreibung
id
Integer
ID der Aufgabe
Beispielantwort für `body`
{
"type" : " task" ,
"id" : 1073 ,
"name" : " Some important task" ,
"project_id" : 6662 ,
"relative_costs" : null ,
"complete" : null ,
"deadline" : " 2020-05-15" ,
"flagged" : null ,
"record_state" : " active" ,
"created_at" : " 2023-04-04T10:14:27.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:27.000+02:00" ,
"project" : {
"type" : " project" ,
"id" : 6662 ,
"name" : " Important project" ,
"description" : null ,
"start_date" : " 9999-01-01" ,
"end_date" : " 9999-12-31" ,
"flagged" : null ,
"budget_type" : null ,
"budget_money" : null ,
"budget_time" : null ,
"budget_time_unit" : null ,
"customer_default" : false ,
"record_state" : " active" ,
"created_at" : " 2023-04-04T10:14:27.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:27.000+02:00" ,
"company_id" : 5076 ,
"color" : null
},
"proposition" : {
"type" : " proposition" ,
"id" : 930 ,
"name" : " Very important service" ,
"proposition_type" : " service" ,
"description" : " " ,
"price" : " 150.0" ,
"time_unit" : " hour" ,
"unit_name_1" : " Stunde" ,
"unit_name_n" : " Stunden" ,
"record_state" : " active" ,
"flagged" : null ,
"favorite" : null ,
"created_at" : " 2023-04-04T10:14:27.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:27.000+02:00"
},
"user" : {
"type" : " user" ,
"id" : 1 ,
"full_name" : " Ansgar Agenturchef" ,
"first_name" : " Ansgar" ,
"last_name" : " Agenturchef" ,
"role_f" : " Accountinhaber" ,
"email" : " ansgar@odacer.com"
}
}
Tracker::TimeEntry (Zeiteinträge)
client . v1 . trackerTimeEntry . all ( ) . then ( ( timeEntries , err ) => {
console . log ( timeEntries ) ;
} ) ;
Name
Typ
Beschreibung
page
Integer
Seite
pageSize
Integer
Anzahl der Einträge pro Seite
orderBy
String
Sortierung
orderDirection
String
Sortierrichtung
projectId
Integer
Projekt-ID
taskId
Integer
Aufgaben-ID
invoiceId
Integer
Rechnungs-ID
userId
Integer
Benutzer-ID
billingState
String
Rechnungsstatus
startTimeRangeStart
String
Startzeitpunkt
startTimeRangeEnd
String
Endzeitpunkt
Beispielantwort für `body`
{
"type" : " list" ,
"page" : 1 ,
"page_size" : 100 ,
"total_pages" : 1 ,
"total_entries" : 2 ,
"has_more" : false ,
"entries" : [
{
"type" : " time_entry" ,
"id" : 582 ,
"user_id" : 1392 ,
"task_id" : 1115 ,
"project_id" : 6759 ,
"started_at" : " 2020-05-11T10:00:00.000+02:00" ,
"ended_at" : " 2020-05-11T12:00:00.000+02:00" ,
"duration" : 7200 ,
"comments" : " " ,
"fingerprint" : " 20230404081429521" ,
"record_state" : " active" ,
"billable_duration" : 7200 ,
"unbillable" : false ,
"created_at" : " 2023-04-04T10:14:29.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:29.000+02:00"
},
{
"type" : " time_entry" ,
"id" : 583 ,
"user_id" : 1 ,
"task_id" : 1116 ,
"project_id" : 6762 ,
"started_at" : " 2023-04-04T10:14:00.000+02:00" ,
"ended_at" : " 2023-04-04T13:14:00.000+02:00" ,
"duration" : 10800 ,
"comments" : " " ,
"fingerprint" : " 20230404081429446" ,
"record_state" : " active" ,
"billable_duration" : 10800 ,
"unbillable" : false ,
"created_at" : " 2023-04-04T10:14:29.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:29.000+02:00"
}
]
}
client . v1 . trackerTimeEntry . by ( { id : 666 } ) . then ( ( timeEntry , err ) => {
console . log ( timeEntry ) ;
} ) ;
Name
Typ
Beschreibung
id
Integer
ID
Beispielantwort für `body`
{
"type" : " time_entry" ,
"id" : 584 ,
"user_id" : 1395 ,
"task_id" : 1117 ,
"project_id" : 6764 ,
"started_at" : " 2020-05-11T10:00:00.000+02:00" ,
"ended_at" : " 2020-05-11T12:00:00.000+02:00" ,
"duration" : 7200 ,
"comments" : " " ,
"fingerprint" : " 2023040408142919" ,
"record_state" : " active" ,
"billable_duration" : 7200 ,
"unbillable" : false ,
"created_at" : " 2023-04-04T10:14:29.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:29.000+02:00" ,
"project" : {
"type" : " project" ,
"id" : 6764 ,
"name" : " Some important project" ,
"description" : null ,
"start_date" : " 9999-01-01" ,
"end_date" : " 9999-12-31" ,
"flagged" : null ,
"budget_type" : null ,
"budget_money" : null ,
"budget_time" : null ,
"budget_time_unit" : null ,
"customer_default" : false ,
"record_state" : " active" ,
"created_at" : " 2023-04-04T10:14:29.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:29.000+02:00" ,
"company_id" : 5133 ,
"color" : null
},
"task" : {
"type" : " task" ,
"id" : 1117 ,
"name" : " Some Task" ,
"project_id" : 6764 ,
"relative_costs" : null ,
"complete" : null ,
"deadline" : null ,
"flagged" : null ,
"record_state" : " active" ,
"created_at" : " 2023-04-04T10:14:29.000+02:00" ,
"updated_at" : " 2023-04-04T10:14:29.000+02:00"
},
"user" : {
"type" : " user" ,
"id" : 1395 ,
"full_name" : " Will E Coyote" ,
"first_name" : " Will E" ,
"last_name" : " Coyote" ,
"role_f" : " Zeiterfasser" ,
"email" : " user-5370f244dfed5468f4e8@example.org"
},
"invoice" : null
}
Es könnnen Environment-Variables gesetzt werden, um die Konfiguration des Clients zu übernehmen.
Schau dazu mal in die .env.example Datei.
stell sicher, dass die Environment-Variable PAPIERKRAM_API_SUBDOMAIN
gesetzt ist
stell sicher, dass die Environment-Variable PAPIERKRAM_API_KEY
gesetzt ist
$ npm test
I recommend using Jest Run It to run/debug tests right from your editor.
Here's what my settings look like:
Example .vscode/settings.json
:
{
"editor.formatOnSave" : true ,
"jestRunIt.environmentVariables" : " NODE_OPTIONS=--experimental-vm-modules" ,
"jestRunIt.jestCLIOptions" : [" --detectOpenHandles" ]
}