Zum Inhalt springen
Annuva
Dokumentation · API-Referenz

API & KI

API-Referenz

Alle Endpunkte der REST-API mit Parametern und Antworten, erzeugt aus der OpenAPI-Beschreibung.

Diese Referenz entsteht aus der OpenAPI-Beschreibung einer laufenden Annuva-Instanz. Deine eigene Instanz veröffentlicht dasselbe Dokument unter /api/v1/openapi. Authentifizierung und Konventionen stehen unter REST-API. Die Kurzbeschreibungen der Endpunkte sind auf Englisch, so wie sie die API selbst liefert.

Klick auf einen Endpunkt, um Parameter und Antwort zu sehen.

API-Version 1.3.0

billing

POST/api/v1/billing/run

Recurring billing run (draft invoices from due recurring charges)

Parameter

dryRunBodyboolean
untilBodystring (date)

Antwort

  • 200OKobject

customers

GET/api/v1/customers

List customers

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: Customer[], limit: integer, offset: integer, total: integer}
POST/api/v1/customers

Create customer

Parameter

namePflichtBodystring
channelBody"direct" | "partner" | "own_project" | "internal"
partnerIdBodystring (uuid) | null
statusBody"active" | "paused" | "inactive" | "in_preparation"
languageBody"de" | "en"
contactNameBodystring | null
emailBodystring (email) | null
phoneBodystring | null
billingAddressBodystring | null
vatIdBodystring | null
hourlyRateBodynumber | null
hostingSummaryBodystring | null
notesBodystring | null

Antwort

  • 201CreatedCustomer
GET/api/v1/customers/{id}

Get customer

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKCustomer
PATCH/api/v1/customers/{id}

Update customer

Parameter

idPflichtPfadstring (uuid)
nameBodystring
channelBody"direct" | "partner" | "own_project" | "internal"
partnerIdBodystring (uuid) | null
statusBody"active" | "paused" | "inactive" | "in_preparation"
languageBody"de" | "en"
contactNameBodystring | null
emailBodystring (email) | null
phoneBodystring | null
billingAddressBodystring | null
vatIdBodystring | null
hourlyRateBodynumber | null
hostingSummaryBodystring | null
notesBodystring | null

Antwort

  • 200OKCustomer
DELETE/api/v1/customers/{id}

Delete customer

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted
POST/api/v1/customers/{id}/archive

Archive customer

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKCustomer
DELETE/api/v1/customers/{id}/archive

Restore archived customer

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKCustomer

dashboard

GET/api/v1/dashboard

Dashboard data

Parameter

yearQueryinteger
customerQuerystring (uuid)

Antwort

  • 200OKobject

expenses

GET/api/v1/expenses

List expenses

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: Expense[], limit: integer, offset: integer, total: integer}
POST/api/v1/expenses

Create expense

Parameter

datePflichtBodystring
vendorPflichtBodystring
itemPflichtBodystring
categoryPflichtBody"server" | "domain" | "package" | "license" | "hardware" | "software" | "service" | "travel" | "office" | "other"
assignedToPflichtBodystring (uuid)
grossAmountPflichtBodynumber
originalAmountBodynumber | null
originalCurrencyBodystring | null
statusBody"receipt" | "expected" | "planned"
receiptFileIdBodystring (uuid) | null

Antwort

  • 201CreatedExpense
GET/api/v1/expenses/{id}

Get expense

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKExpense
PATCH/api/v1/expenses/{id}

Update expense

Parameter

idPflichtPfadstring (uuid)
dateBodystring
vendorBodystring
itemBodystring
categoryBody"server" | "domain" | "package" | "license" | "hardware" | "software" | "service" | "travel" | "office" | "other"
assignedToBodystring (uuid)
grossAmountBodynumber
originalAmountBodynumber | null
originalCurrencyBodystring | null
statusBody"receipt" | "expected" | "planned"
receiptFileIdBodystring (uuid) | null

Antwort

  • 200OKExpense
DELETE/api/v1/expenses/{id}

Delete expense

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted

files

POST/api/v1/files

Upload a file

Parameter

fileBodystring (binary)

Antwort

  • 201Stored fileobject
GET/api/v1/files/{id}

Download a file

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200File content

invoice-templates

GET/api/v1/invoice-templates

List invoiceTemplates

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: InvoiceTemplate[], limit: integer, offset: integer, total: integer}
POST/api/v1/invoice-templates

Create invoice template

Parameter

namePflichtBodystring
isDefaultBodyboolean | null
logoFileIdBodystring (uuid) | null
senderLineBodystring | null
introTextBodystring | null
closingTextBodystring | null
signatureFileIdBodystring (uuid) | null
signatureNameBodystring | null
footerLeftBodystring | null
footerCenterBodystring | null
footerRightBodystring | null
accentColorBodystring | null
paymentTermDaysBodyinteger

Antwort

  • 201CreatedInvoiceTemplate
GET/api/v1/invoice-templates/{id}

Get invoice template

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKInvoiceTemplate
PATCH/api/v1/invoice-templates/{id}

Update invoice template

Parameter

idPflichtPfadstring (uuid)
nameBodystring
isDefaultBodyboolean | null
logoFileIdBodystring (uuid) | null
senderLineBodystring | null
introTextBodystring | null
closingTextBodystring | null
signatureFileIdBodystring (uuid) | null
signatureNameBodystring | null
footerLeftBodystring | null
footerCenterBodystring | null
footerRightBodystring | null
accentColorBodystring | null
paymentTermDaysBodyinteger

Antwort

  • 200OKInvoiceTemplate
DELETE/api/v1/invoice-templates/{id}

Delete invoice template

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted
POST/api/v1/invoice-templates/preview

Preview an invoice template – also unsaved values – as a sample invoice (admin)

Parameter

nameBodystring
isDefaultBodyboolean | null
logoFileIdBodystring (uuid) | null
senderLineBodystring | null
introTextBodystring | null
closingTextBodystring | null
signatureFileIdBodystring (uuid) | null
signatureNameBodystring | null
footerLeftBodystring | null
footerCenterBodystring | null
footerRightBodystring | null
accentColorBodystring | null
paymentTermDaysBodyinteger

Antwort

  • 200Sample invoice as PDF

invoices

GET/api/v1/invoices

List invoices

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: Invoice[], limit: integer, offset: integer, total: integer}
POST/api/v1/invoices

Create draft invoice

Parameter

customerIdPflichtBodystring (uuid)
descriptionPflichtBodystring
dueDateBodystring | null
languageBody"de" | "en"
linesPflichtBodyobject[]
notesBodystring | null
partnerIdBodystring (uuid) | null
recipientTypeBody"customer" | "partner"
serviceDateFromBodystring | null
serviceDateToBodystring | null
templateIdBodystring (uuid) | null

Antwort

  • 201Draft createdInvoice
GET/api/v1/invoices/{id}

Get invoice

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKInvoice
PATCH/api/v1/invoices/{id}

Update draft invoice

Parameter

idPflichtPfadstring (uuid)
customerIdBodystring (uuid)
descriptionBodystring
dueDateBodystring | null
languageBody"de" | "en"
linesBodyobject[]
notesBodystring | null
partnerIdBodystring (uuid) | null
recipientTypeBody"customer" | "partner"
serviceDateFromBodystring | null
serviceDateToBodystring | null
templateIdBodystring (uuid) | null

Antwort

  • 200OKInvoice
DELETE/api/v1/invoices/{id}

Delete draft invoice

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted
POST/api/v1/invoices/{id}/issue

Issue invoice (number, PDF)

Parameter

idPflichtPfadstring (uuid)
dateBodystring (date)

Antwort

  • 200OKInvoice
POST/api/v1/invoices/{id}/pay

Mark as paid

Parameter

idPflichtPfadstring (uuid)
paidAtBodystring (date)

Antwort

  • 200OKInvoice
POST/api/v1/invoices/{id}/reopen

Paid → open

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKInvoice
POST/api/v1/invoices/{id}/cancel

Cancel via cancellation invoice

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKInvoice
POST/api/v1/invoices/{id}/send

Send by e-mail

Parameter

idPflichtPfadstring (uuid)
messageBodystring
toBodystring (email)

Antwort

  • 200OKInvoice
POST/api/v1/invoices/{id}/remind

Send payment reminder

Parameter

idPflichtPfadstring (uuid)
messageBodystring
toBodystring (email)

Antwort

  • 200OKInvoice
GET/api/v1/invoices/{id}/pdf

Invoice PDF (draft preview or stored PDF)

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200PDF

offers

GET/api/v1/offers

List offers

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: Offer[], limit: integer, offset: integer, total: integer}
POST/api/v1/offers

Create offer

Parameter

customerIdPflichtBodystring (uuid)
numberPflichtBodystring
datePflichtBodystring
validUntilBodystring | null
amountPflichtBodynumber
statusBody"open" | "accepted" | "rejected"
descriptionBodystring | null
fileIdBodystring (uuid) | null

Antwort

  • 201CreatedOffer
GET/api/v1/offers/{id}

Get offer

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKOffer
PATCH/api/v1/offers/{id}

Update offer

Parameter

idPflichtPfadstring (uuid)
customerIdBodystring (uuid)
numberBodystring
dateBodystring
validUntilBodystring | null
amountBodynumber
statusBody"open" | "accepted" | "rejected"
descriptionBodystring | null
fileIdBodystring (uuid) | null

Antwort

  • 200OKOffer
DELETE/api/v1/offers/{id}

Delete offer

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted

partners

GET/api/v1/partners

List partners

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: Partner[], limit: integer, offset: integer, total: integer}
POST/api/v1/partners

Create partner

Parameter

namePflichtBodystring
emailBodystring (email) | null
billingAddressBodystring | null
notesBodystring | null

Antwort

  • 201CreatedPartner
GET/api/v1/partners/{id}

Get partner

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKPartner
PATCH/api/v1/partners/{id}

Update partner

Parameter

idPflichtPfadstring (uuid)
nameBodystring
emailBodystring (email) | null
billingAddressBodystring | null
notesBodystring | null

Antwort

  • 200OKPartner
DELETE/api/v1/partners/{id}

Delete partner

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted

profile

GET/api/v1/profile

Own profile

Parameter

Keine Parameter.

Antwort

  • 200OKobject
PATCH/api/v1/profile

Update own profile

Parameter

Keine Parameter.

Antwort

  • 200OKobject
GET/api/v1/profile/two-factor

Two-factor status of the own account

Parameter

Keine Parameter.

Antwort

  • 200OK{enabled: boolean, recoveryCodesLeft: integer}
GET/api/v1/tokens

Own API tokens

Parameter

Keine Parameter.

Antwort

  • 200OKobject
POST/api/v1/tokens

Create API token

Parameter

Keine Parameter.

Antwort

  • 201Token (shown once)

recurring-charges

GET/api/v1/recurring-charges

List recurringCharges

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: RecurringCharge[], limit: integer, offset: integer, total: integer}
POST/api/v1/recurring-charges

Create recurring charge

Parameter

customerIdPflichtBodystring (uuid)
servicePflichtBody"hosting" | "domain" | "package" | "maintenance" | "other"
descriptionBodystring | null
amountPerYearPflichtBodynumber
intervalBody"yearly" | "quarterly" | "monthly"
nextInvoiceDatePflichtBodystring
startsAfterSetupBodyboolean | null

Antwort

  • 201CreatedRecurringCharge
GET/api/v1/recurring-charges/{id}

Get recurring charge

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKRecurringCharge
PATCH/api/v1/recurring-charges/{id}

Update recurring charge

Parameter

idPflichtPfadstring (uuid)
customerIdBodystring (uuid)
serviceBody"hosting" | "domain" | "package" | "maintenance" | "other"
descriptionBodystring | null
amountPerYearBodynumber
intervalBody"yearly" | "quarterly" | "monthly"
nextInvoiceDateBodystring
startsAfterSetupBodyboolean | null

Antwort

  • 200OKRecurringCharge
DELETE/api/v1/recurring-charges/{id}

Delete recurring charge

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted

recurring-costs

GET/api/v1/recurring-costs

List recurringCosts

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: RecurringCost[], limit: integer, offset: integer, total: integer}
POST/api/v1/recurring-costs

Create recurring cost

Parameter

namePflichtBodystring
typePflichtBody"domain" | "package" | "server" | "other"
providerPflichtBodystring
assignedToPflichtBodystring (uuid)
costPerYearPflichtBodynumber
rebilledPerYearBodynumber
nextRenewalBodystring | null
autoRenewBodyboolean | null
endsAtBodystring | null

Antwort

  • 201CreatedRecurringCost
GET/api/v1/recurring-costs/{id}

Get recurring cost

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKRecurringCost
PATCH/api/v1/recurring-costs/{id}

Update recurring cost

Parameter

idPflichtPfadstring (uuid)
nameBodystring
typeBody"domain" | "package" | "server" | "other"
providerBodystring
assignedToBodystring (uuid)
costPerYearBodynumber
rebilledPerYearBodynumber
nextRenewalBodystring | null
autoRenewBodyboolean | null
endsAtBodystring | null

Antwort

  • 200OKRecurringCost
DELETE/api/v1/recurring-costs/{id}

Delete recurring cost

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted

resources

GET/api/v1/resources

List resources

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: Resource[], limit: integer, offset: integer, total: integer}
POST/api/v1/resources

Create resource

Parameter

customerIdPflichtBodystring (uuid)
kindPflichtBody"domain" | "container" | "proxy_host" | "package" | "server" | "other"
namePflichtBodystring
locationBodystring | null
detailsBodystring | null
externalRefBodystring | null

Antwort

  • 201CreatedResource
GET/api/v1/resources/{id}

Get resource

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKResource
PATCH/api/v1/resources/{id}

Update resource

Parameter

idPflichtPfadstring (uuid)
customerIdBodystring (uuid)
kindBody"domain" | "container" | "proxy_host" | "package" | "server" | "other"
nameBodystring
locationBodystring | null
detailsBodystring | null
externalRefBodystring | null

Antwort

  • 200OKResource
DELETE/api/v1/resources/{id}

Delete resource

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted

settings

GET/api/v1/settings

Business settings

Parameter

Keine Parameter.

Antwort

  • 200OKSettings
PATCH/api/v1/settings

Update settings (admin)

Parameter

nameBodystring
companyNameBodystring | null
addressBodystring | null
emailBodystring (email) | null
phoneBodystring | null
websiteBodystring | null
taxNumberBodystring | null
vatIdBodystring | null
bankNameBodystring | null
ibanBodystring | null
bicBodystring | null
vatModeBody"small_business" | "regular"
defaultVatRateBodynumber
currencyBodystring
localeBody"de-DE" | "de-AT" | "de-CH" | "en-GB" | "en-US"
timezoneBodystring
defaultHourlyRateBodynumber
defaultHostingPerYearBodynumber
invoiceNumberFormatBodystring
recurringInvoiceMonthBodyinteger
taxPaymentMonthBodyinteger
serverCostAllocationBody"equal_among_hosting_customers" | "none"
domainPassThroughBody"at_cost" | "markup"

Antwort

  • 200OKSettings

system

GET/api/health

Health check

Parameter

Keine Parameter.

Antwort

  • 200Healthy
POST/api/mcp

MCP server (Streamable HTTP, JSON-RPC)

Parameter

Keine Parameter.

Antwort

  • 200MCP response

tasks

GET/api/v1/tasks

List tasks

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: Task[], limit: integer, offset: integer, total: integer}
POST/api/v1/tasks

Create task

Parameter

titlePflichtBodystring
dueDateBodystring | null
customerIdBodystring (uuid) | null
statusBody"open" | "waiting_for_go" | "done"
noteBodystring | null

Antwort

  • 201CreatedTask
GET/api/v1/tasks/{id}

Get task

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKTask
PATCH/api/v1/tasks/{id}

Update task

Parameter

idPflichtPfadstring (uuid)
titleBodystring
dueDateBodystring | null
customerIdBodystring (uuid) | null
statusBody"open" | "waiting_for_go" | "done"
noteBodystring | null

Antwort

  • 200OKTask
DELETE/api/v1/tasks/{id}

Delete task

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted

tax-adjustments

GET/api/v1/tax-adjustments

List taxAdjustments

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: TaxAdjustment[], limit: integer, offset: integer, total: integer}
POST/api/v1/tax-adjustments

Create tax adjustment

Parameter

yearPflichtBodyinteger
descriptionPflichtBodystring
profitAdjustmentPflichtBodynumber

Antwort

  • 201CreatedTaxAdjustment
GET/api/v1/tax-adjustments/{id}

Get tax adjustment

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKTaxAdjustment
PATCH/api/v1/tax-adjustments/{id}

Update tax adjustment

Parameter

idPflichtPfadstring (uuid)
yearBodyinteger
descriptionBodystring
profitAdjustmentBodynumber

Antwort

  • 200OKTaxAdjustment
DELETE/api/v1/tax-adjustments/{id}

Delete tax adjustment

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted

tax-years

GET/api/v1/tax-years

List taxYears

Parameter

limitQueryinteger
offsetQueryinteger
sortQuerystring
orderQuery"asc" | "desc"
qQuerystring
customerIdQuerystring (uuid)
filter[field]QuerystringEquality filter, e.g. filter[status]=open

Antwort

  • 200OK{items: TaxYear[], limit: integer, offset: integer, total: integer}
POST/api/v1/tax-years

Create tax year

Parameter

yearPflichtBodyinteger
marginalRatePercentBodynumber | null
profitPerAssessmentBodynumber | null

Antwort

  • 201CreatedTaxYear
GET/api/v1/tax-years/{id}

Get tax year

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKTaxYear
PATCH/api/v1/tax-years/{id}

Update tax year

Parameter

idPflichtPfadstring (uuid)
yearBodyinteger
marginalRatePercentBodynumber | null
profitPerAssessmentBodynumber | null

Antwort

  • 200OKTaxYear
DELETE/api/v1/tax-years/{id}

Delete tax year

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted

users

GET/api/v1/users

List users (admin)

Parameter

Keine Parameter.

Antwort

  • 200OKobject
POST/api/v1/users

Create user (admin)

Parameter

Keine Parameter.

Antwort

  • 201Created
PATCH/api/v1/users/{id}

Update user (admin)

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 200OKobject
DELETE/api/v1/users/{id}

Delete user (admin)

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Deleted
DELETE/api/v1/users/{id}/two-factor

Reset two-factor authentication of a user (admin)

Parameter

idPflichtPfadstring (uuid)

Antwort

  • 204Two-factor authentication switched off
Diese Seite auf GitHub bearbeiten