Key Takeaways
- API tokens never expire, but they die with the user account. sevdesk uses static tokens tied to individual users. If the user is deleted, the token is gone permanently.
- No webhooks means you have to poll for changes. sevdesk has no push notifications. The only way to detect new data is calling the API on a schedule.
- Pagination hides total counts by default. You need to add countAll=true to every request. Without it, you have no idea how many records exist.
- GoBD compliance and German account codes add real complexity. Writing financial data requires correct SKR account codes per tenant and respect for German bookkeeping regulations.
- Maesn handles all of the above. One integration gives you secure token management, automated sync, normalized pagination, GoBD-compliant account mapping, and access to 30+ additional accounting systems
The sevdesk API Integration Uses Infinite-Lifetime Tokens Tied to User Accounts
The sevdesk API uses token-based authentication. Every administrator gets a single API token: a 32-character hex string passed in the Authorization header. There is no OAuth, no token refresh, and no expiry.
Authorization: 01234567890abcdef01234567890abcde
The problem is the token-to-user binding. Each token belongs to a specific sevdesk user account. If that user is deleted, the token is permanently destroyed with no way to recover it. For a multi-tenant SaaS product, this creates a silent failure mode. A customer who removes the connected sevdesk user breaks the integration without warning. Your API calls simply start returning 401 errors, and there is no event or notification telling you the token was invalidated.
There is also no way to rotate tokens proactively. The token a customer provides at onboarding is the same one used for the entire lifetime of the connection. If it leaks, the only fix is deleting the user and creating a new one, which also kills the integration.
Maesn Manages Token Lifecycle Securely: Per-Tenant Storage and Disconnection Detection Are Built In
Maesn stores tokens securely per tenant and communicates the user-binding constraint during onboarding. If a token becomes invalid, the disconnection surfaces in the Maesn Dashboard and via API status codes. No custom health checks needed.
The sevdesk API Integration Lacks Webhook Support and Requires Polling
sevdesk does not offer webhooks. There are no event subscriptions, no push notifications, and no callbacks in the API. The only way to know if data changed is to ask repeatedly.
GET /api/v1/Invoice?limit=100&offset=0&countAll=true
# Compare against local state, repeat every N minutes
This means your integration must build a polling infrastructure: define intervals per resource type, track the last known state for change detection, and manage concurrent polling across all connected tenants. Every sync cycle costs API calls regardless of whether anything changed. At scale with hundreds of tenants, the request overhead for change detection alone becomes significant.
Maesn Unified Webhooks for sevdesk
Maesn adds unified webhooks on top of sevdesk’s API so you can build event‑driven integrations without custom polling logic. Webhooks notify your app whenever relevant events occur, for example when invoices are created or customers are updated, while Maesn handles change detection and polling reliably in the background.
The sevdesk API Integration Hides Total Counts Behind a Separate Parameter
sevdesk paginates with limit and offset. The limit must be between 1 and 1000. There are no cursors and no Link headers. Most importantly, the API does not return total record counts by default.
GET /api/v1/Invoice?limit=100&offset=0&countAll=true
Response: {"total": "157", "objects": [...]}
To find out how many records exist, you must explicitly add countAll=true to every request. Without it, the response contains only the data objects and no indication of how many more pages remain. This makes it impossible to show sync progress or know when a full pull is complete unless you request the count on every single call.
The offset model also slows down on large datasets. As the offset increases, the API skips over more records before returning the page. For thousands of entries, later pages get progressively slower. The 1000-record limit has been strictly enforced since May 2025, returning HTTP 400 for values outside the allowed range.
Maesn Normalizes Pagination: Total Counts and Offset Tracking Are Handled Internally
Maesn performs countAll calls internally, manages offset tracking, and always returns total record counts in a consistent format. Your product gets predictable pagination regardless of how sevdesk structures it natively.
sevdesk Partner Program and Marketplace Listing
sevdesk falls into the "Partnership or App Optional" category. No formal approval is needed before going live. A free sandbox is available for development, and production access is coordinated via Maesn.
sevdesk is one of the biggest SMB accounting systems in Germany and Austria. After onboarding your first 10 users, you can register for the sevdesk partner program.
Maesn Supports the sevdesk Partner Listing Process
Unlike most unified API providers, Maesn does not put its name on your marketplace listing. Your app appears under your own brand. For a full breakdown of partnership requirements, read the Maesn accounting integration partnerships guide.
Why Teams Use Maesn for Their sevdesk API Integration
Integrating directly with the sevdesk API means handling tokens tied to deletable user accounts, building polling infrastructure for missing webhooks, managing pagination with hidden total counts, and mapping German GoBD compliance per tenant. Together, these create a maintenance surface that grows with every connected customer.
Maesn abstracts all of it behind a unified API. One integration gives you secure token management, automated sync, normalized pagination, GoBD-compliant account mapping, and access to 30+ additional accounting systems including DATEV, Moneybird, Xero, QuickBooks, and more.
Check the Maesn documentation for sevdesk or talk to the Maesn team to get started.




.webp)
