# Calculate Net Salary — Obolus

> Use this only for detailed net salary and payroll calculation for one country and one or two people. Inputs and outputs are country-polymorphic: the same field name can map to different tax, social security, or payroll concepts depending…

- Key: `obolus-berechne`
- Type: Action (Read-only)
- Version: 0.0.2
- App: Obolus (`obolus`) — https://pipedream.com/apps/obolus.md
- This page (HTML): https://pipedream.com/apps/obolus/actions/berechne
- Hints: read-only · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/obolus/actions/berechne/berechne.mjs

## Description

Use this only for detailed net salary and payroll calculation for one country and one or two people. Inputs and outputs are country-polymorphic: the same field name can map to different tax, social security, or payroll concepts depending on the selected country and tax system. For comparing salary, tax, or net income across multiple countries, use Compare Salary Across Countries instead. [See the documentation](https://www.obolusfinanz.de/en/developers)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `country` | `string` | Yes | Country code, e.g. DE. In Calculate Net Salary this selects the country-specific tax and payroll system, so identically named inputs and outputs can have different meanings by country. |
| `taxYear` | `integer` | Yes | Country-specific tax year for this detailed payroll calculation, e.g. 2026. |
| `currency` | `string` | Yes | Currency code in upper-case ISO style for the salary input and payroll output. |
| `payrollPeriod` | `integer` | Yes | Top-level LZZ value. 1=year, 2=month, 3=week, 4=day. Direct salary inputs are annual gross amounts; this action converts them to the selected payroll period before calling Obolus. Period handling is interpreted by the selected country's payroll rules. |
| `grossAnnual` | `string` | Yes | Person 1 annual gross salary in major units, e.g. 60000. Use Compare Salary Across Countries instead when the task is to compare this salary across multiple countries. |
| `taxClass` | `integer` | Yes | Country-specific tax class, filing status, or equivalent payroll category. The numeric meaning depends on the selected country. |
| `birthYear` | `integer` | Yes | Birth year of the first person. |
| `includeSecondPerson` | `boolean` | No | Enable a second person and switch Modus to 2 for detailed household payroll in one selected country. |
| `showAdvancedInputs` | `boolean` | No | Reveal additional Obolus OpenAPI fields for advanced and country-specific payroll scenarios. These fields are not globally portable; their meaning can change by country and tax system. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "obolus",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "obolus-berechne",
  arguments: {
    country: "Country",
    taxYear: 10,
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "obolus-berechne",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    obolus: { authProvisionId: "apn_xxxxxxx" },
    country: "Country",
    taxYear: 10,
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "obolus-berechne",
    "configured_props": {
      "obolus": { "authProvisionId": "apn_xxxxxxx" },
      "country": "Country",
      "taxYear": 10
    }
  }'
```

---

- App: https://pipedream.com/apps/obolus.md · All apps: https://pipedream.com/apps
