{"openapi":"3.1.0","info":{"title":"Singapore CPF Contribution Calculator API","version":"0.1.0","description":"Singapore CPF Contribution Calculator turns the published CPF Board contribution table in force from 1 January 2026 into exact monthly numbers for a small employer. calc_cpf_contribution gives employer, employee and total CPF for one employee (Singapore Citizen or SPR from the third year of PR status) from the monthly ordinary wage, optional additional wage, and age or date of birth, using the...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://sg-cpf-calc.connectorbay.com/mcp.\n\nDisclaimer: General information only, not legal, tax, accounting or payment advice. Singapore CPF Contribution Calculator is an independent tool: it is not affiliated with, endorsed by or operated by any government body, central bank, standards body or scheme operator. Rates, thresholds and rules change; check the cited official source and confirm with a qualified professional before you rely on a result.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/sg-cpf-calc/docs"},"termsOfService":"https://connectorbay.com/sg-cpf-calc/terms"},"servers":[{"url":"https://sg-cpf-calc.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/sg-cpf-calc/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/calc_cpf_contribution":{"post":{"operationId":"calc_cpf_contribution","summary":"Employer, employee and total CPF for one Singapore Citizen or SPR (third year onwards) for a wage month, by age band and","description":"Employer, employee and total CPF for one Singapore Citizen or SPR (third year onwards) for a wage month, by age band and wage bracket, with the CPF rounding rule. Use for \"How much CPF do I pay for a 42-year-old earning SGD 3,200 a month?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ordinary_wage":{"description":"Amount in Singapore dollars as a plain decimal string with at most 2 decimals, for example 3200.00","title":"Ordinary Wage","type":"string"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Age in completed years on the last day of the month BEFORE the wage month (CPF applies new rates from the month after the 55th, 60th, 65th and 70th birthday). Give either age or birth_date, not both","title":"Age"},"birth_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Employee date of birth, ISO YYYY-MM-DD; the band follows the CPF month-after-birthday rule. Give either age or birth_date, not both","title":"Birth Date"},"wage_month":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Wage month as YYYY-MM (default: the current month, UTC). The stored table applies from 2026-01","title":"Wage Month"},"additional_wage":{"default":"0","description":"Additional wages paid in the month, for example a bonus, as a decimal string; default 0","title":"Additional Wage","type":"string"},"year_ow_subject_to_cpf":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Total ordinary wages subject to CPF for the calendar year so far, including this month, each month capped at the ordinary wage ceiling. Required only when additional_wage is above 0 and total wages exceed 750","title":"Year Ow Subject To Cpf"}},"required":["ordinary_wage"],"title":"calc_cpf_contributionArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/calc_payroll_batch":{"post":{"operationId":"calc_payroll_batch","summary":"CPF for a list of employees for one wage month: per-employee employer, employee and total CPF plus the monthly totals. U","description":"CPF for a list of employees for one wage month: per-employee employer, employee and total CPF plus the monthly totals. Use for \"Run CPF for my three staff for September 2026 and total what I owe and deduct.\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"employees":{"description":"Employees for the month (1 to 100). Each item is an object with label (any text you choose), ordinary_wage (decimal string), one of age or birth_date, and optionally additional_wage and year_ow_subject_to_cpf","items":{"additionalProperties":true,"type":"object"},"title":"Employees","type":"array"},"wage_month":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Wage month as YYYY-MM (default: the current month, UTC). The stored table applies from 2026-01","title":"Wage Month"}},"required":["employees"],"title":"calc_payroll_batchArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_cpf_age_bands":{"post":{"operationId":"list_cpf_age_bands","summary":"The five CPF age bands with employer, employee and total rates, the formulas for low wages, the ordinary wage ceiling an","description":"The five CPF age bands with employer, employee and total rates, the formulas for low wages, the ordinary wage ceiling and the rounding rule of the stored 2026 table. Use for \"What are the CPF contribution rates for each age band this year?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"on_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Date the table should apply to, ISO YYYY-MM-DD (default today, UTC). Dates before 2026-01-01 are refused","title":"On Date"}},"title":"list_cpf_age_bandsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/cpf_staff_cost_estimate":{"post":{"operationId":"cpf_staff_cost_estimate","summary":"Monthly cost of an employee to the employer: gross ordinary wage plus employer CPF plus any other cost you supply. Use f","description":"Monthly cost of an employee to the employer: gross ordinary wage plus employer CPF plus any other cost you supply. Use for \"What does a 58-year-old on SGD 4,500 a month really cost me including CPF?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ordinary_wage":{"description":"Amount in Singapore dollars as a plain decimal string with at most 2 decimals, for example 3200.00","title":"Ordinary Wage","type":"string"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Age in completed years on the last day of the month BEFORE the wage month (CPF applies new rates from the month after the 55th, 60th, 65th and 70th birthday). Give either age or birth_date, not both","title":"Age"},"birth_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Employee date of birth, ISO YYYY-MM-DD; the band follows the CPF month-after-birthday rule. Give either age or birth_date, not both","title":"Birth Date"},"wage_month":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Wage month as YYYY-MM (default: the current month, UTC). The stored table applies from 2026-01","title":"Wage Month"},"other_employer_costs":{"default":"0","description":"Any other monthly employer cost you want included, such as levies, insurance or allowances, as a decimal string; default 0. It is added as given, not calculated","title":"Other Employer Costs","type":"string"}},"required":["ordinary_wage"],"title":"cpf_staff_cost_estimateArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/cpf_wage_ceilings":{"post":{"operationId":"cpf_wage_ceilings","summary":"The CPF ordinary wage ceiling, the additional wage ceiling formula (and the remaining ceiling for a given year to date) ","description":"The CPF ordinary wage ceiling, the additional wage ceiling formula (and the remaining ceiling for a given year to date) and the maximum monthly CPF per age band. Use for \"What is the CPF ordinary wage ceiling and how much bonus can still attract CPF?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"year_ow_subject_to_cpf":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Total ordinary wages subject to CPF for the calendar year, as a decimal string; when given, the remaining additional wage ceiling is computed","title":"Year Ow Subject To Cpf"},"on_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Date the ceilings should apply to, ISO YYYY-MM-DD (default today, UTC). Dates before 2026-01-01 are refused","title":"On Date"}},"title":"cpf_wage_ceilingsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/cpf_next_rate_change":{"post":{"operationId":"cpf_next_rate_change","summary":"The wage months in which an employee's CPF rates change with age (the month after the 55th, 60th, 65th and 70th birthday","description":"The wage months in which an employee's CPF rates change with age (the month after the 55th, 60th, 65th and 70th birthday month), with the rates before and after. Use for \"When do my bookkeeper's CPF rates drop after her birthday?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"birth_date":{"description":"Employee date of birth, ISO YYYY-MM-DD","title":"Birth Date","type":"string"},"on_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Date to look forward from, ISO YYYY-MM-DD (default today, UTC)","title":"On Date"}},"required":["birth_date"],"title":"cpf_next_rate_changeArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}