---
title: "Get the business tax rates of a country"
method: GET
path: "/tax-rates"
tags: ["Tax rates"]
---

# Get the business tax rates of a country

`GET /tax-rates`

## Request

- Base URL: `https://www.upgrowth.dz/api/v1`
- URL: `https://www.upgrowth.dz/api/v1/tax-rates`
- Auth: one of:
  - none
  - HTTP bearer

The 2026 corporate income tax, VAT and main withholding tax rates, plus the income tax scale and flat tax where covered (Algeria, Morocco), each with its legal article and official source. Algeria by default, Tunisia with country=TN, Morocco with country=MA.

## Query parameters

- `lang` 'fr' | 'ar' | 'en'
- `country` string

## Response `200`

The data, with its meta.

- object
  - `data` TaxRates, required
    - `currency` string, required: ISO 4217 code of the currency of the amounts: DZD for Algeria, TND for Tunisia, MAD for Morocco.
    - `year` integer, required: The year of the rules.
    - `corporate_income_tax` TaxRate[], required
      - `code` string, required: A short stable name for the rate.
      - `rate_percent` number, nullable, required: The rate, in percent. Null when the tax is a fixed amount: see minimum_dzd, minimum_tnd or minimum_mad.
      - `label` string, required: The name of the rate, in the language of the request.
      - `applies_to` string, nullable: What the rate applies to.
      - `effective` string, nullable: The date or period the rate applies from, when the text gives one.
      - `minimum_tnd` number, nullable: Tunisia: a minimum amount in dinars (the minimum tax), null otherwise.
      - `minimum_dzd` number, nullable: Algeria: a minimum amount in dinars (the minimum corporate income tax, the minimum IFU), null otherwise.
      - `threshold_dzd` number, nullable: Algeria, IFU only: the yearly turnover ceiling of the regime, in dinars.
      - `bracket_from_dzd` number, nullable: Algeria, income tax scale only: the amount in dinars above which the bracket starts (the part of the income over it, up to bracket_to_dzd, is taxed at the rate).
      - `bracket_to_dzd` number, nullable: Algeria, income tax scale only: the amount in dinars at which the bracket ends, null for the last bracket.
      - `minimum_mad` number, nullable: Morocco: a minimum amount in dirhams (the minimum contribution), null otherwise.
      - `threshold_mad` number, nullable: Morocco, auto-entrepreneur flat tax only: the yearly turnover ceiling of the regime, in dirhams.
      - `bracket_from_mad` number, nullable: Morocco, income tax scale only: the amount in dirhams above which the bracket starts (the part of the income over it, up to bracket_to_mad, is taxed at the rate).
      - `bracket_to_mad` number, nullable: Morocco, income tax scale only: the amount in dirhams at which the bracket ends, null for the last bracket.
      - `legal_basis` string: The article of the code the rate comes from.
      - `note` string, nullable: A note on the rate.
      - `source` SourceRef, required
        - `url` string, uri, required: The official page the record was read on.
        - `title` string, required: What the page is.
        - `retrieved` string, required: The day the page was read, as YYYY-MM-DD.
    - `vat` TaxRate[], required
      - `code` string, required: A short stable name for the rate.
      - `rate_percent` number, nullable, required: The rate, in percent. Null when the tax is a fixed amount: see minimum_dzd, minimum_tnd or minimum_mad.
      - `label` string, required: The name of the rate, in the language of the request.
      - `applies_to` string, nullable: What the rate applies to.
      - `effective` string, nullable: The date or period the rate applies from, when the text gives one.
      - `minimum_tnd` number, nullable: Tunisia: a minimum amount in dinars (the minimum tax), null otherwise.
      - `minimum_dzd` number, nullable: Algeria: a minimum amount in dinars (the minimum corporate income tax, the minimum IFU), null otherwise.
      - `threshold_dzd` number, nullable: Algeria, IFU only: the yearly turnover ceiling of the regime, in dinars.
      - `bracket_from_dzd` number, nullable: Algeria, income tax scale only: the amount in dinars above which the bracket starts (the part of the income over it, up to bracket_to_dzd, is taxed at the rate).
      - `bracket_to_dzd` number, nullable: Algeria, income tax scale only: the amount in dinars at which the bracket ends, null for the last bracket.
      - `minimum_mad` number, nullable: Morocco: a minimum amount in dirhams (the minimum contribution), null otherwise.
      - `threshold_mad` number, nullable: Morocco, auto-entrepreneur flat tax only: the yearly turnover ceiling of the regime, in dirhams.
      - `bracket_from_mad` number, nullable: Morocco, income tax scale only: the amount in dirhams above which the bracket starts (the part of the income over it, up to bracket_to_mad, is taxed at the rate).
      - `bracket_to_mad` number, nullable: Morocco, income tax scale only: the amount in dirhams at which the bracket ends, null for the last bracket.
      - `legal_basis` string: The article of the code the rate comes from.
      - `note` string, nullable: A note on the rate.
      - `source` SourceRef, required
        - `url` string, uri, required: The official page the record was read on.
        - `title` string, required: What the page is.
        - `retrieved` string, required: The day the page was read, as YYYY-MM-DD.
    - `withholding` TaxRate[], required
      - `code` string, required: A short stable name for the rate.
      - `rate_percent` number, nullable, required: The rate, in percent. Null when the tax is a fixed amount: see minimum_dzd, minimum_tnd or minimum_mad.
      - `label` string, required: The name of the rate, in the language of the request.
      - `applies_to` string, nullable: What the rate applies to.
      - `effective` string, nullable: The date or period the rate applies from, when the text gives one.
      - `minimum_tnd` number, nullable: Tunisia: a minimum amount in dinars (the minimum tax), null otherwise.
      - `minimum_dzd` number, nullable: Algeria: a minimum amount in dinars (the minimum corporate income tax, the minimum IFU), null otherwise.
      - `threshold_dzd` number, nullable: Algeria, IFU only: the yearly turnover ceiling of the regime, in dinars.
      - `bracket_from_dzd` number, nullable: Algeria, income tax scale only: the amount in dinars above which the bracket starts (the part of the income over it, up to bracket_to_dzd, is taxed at the rate).
      - `bracket_to_dzd` number, nullable: Algeria, income tax scale only: the amount in dinars at which the bracket ends, null for the last bracket.
      - `minimum_mad` number, nullable: Morocco: a minimum amount in dirhams (the minimum contribution), null otherwise.
      - `threshold_mad` number, nullable: Morocco, auto-entrepreneur flat tax only: the yearly turnover ceiling of the regime, in dirhams.
      - `bracket_from_mad` number, nullable: Morocco, income tax scale only: the amount in dirhams above which the bracket starts (the part of the income over it, up to bracket_to_mad, is taxed at the rate).
      - `bracket_to_mad` number, nullable: Morocco, income tax scale only: the amount in dirhams at which the bracket ends, null for the last bracket.
      - `legal_basis` string: The article of the code the rate comes from.
      - `note` string, nullable: A note on the rate.
      - `source` SourceRef, required
        - `url` string, uri, required: The official page the record was read on.
        - `title` string, required: What the page is.
        - `retrieved` string, required: The day the page was read, as YYYY-MM-DD.
    - `personal_income_tax` TaxRate[], nullable, required: The scale of the income tax on salaries and other personal income, one record per bracket (Algeria: the IRG scale, Morocco: the IR scale). Null when the dataset of the country does not cover it.
      - `code` string, required: A short stable name for the rate.
      - `rate_percent` number, nullable, required: The rate, in percent. Null when the tax is a fixed amount: see minimum_dzd, minimum_tnd or minimum_mad.
      - `label` string, required: The name of the rate, in the language of the request.
      - `applies_to` string, nullable: What the rate applies to.
      - `effective` string, nullable: The date or period the rate applies from, when the text gives one.
      - `minimum_tnd` number, nullable: Tunisia: a minimum amount in dinars (the minimum tax), null otherwise.
      - `minimum_dzd` number, nullable: Algeria: a minimum amount in dinars (the minimum corporate income tax, the minimum IFU), null otherwise.
      - `threshold_dzd` number, nullable: Algeria, IFU only: the yearly turnover ceiling of the regime, in dinars.
      - `bracket_from_dzd` number, nullable: Algeria, income tax scale only: the amount in dinars above which the bracket starts (the part of the income over it, up to bracket_to_dzd, is taxed at the rate).
      - `bracket_to_dzd` number, nullable: Algeria, income tax scale only: the amount in dinars at which the bracket ends, null for the last bracket.
      - `minimum_mad` number, nullable: Morocco: a minimum amount in dirhams (the minimum contribution), null otherwise.
      - `threshold_mad` number, nullable: Morocco, auto-entrepreneur flat tax only: the yearly turnover ceiling of the regime, in dirhams.
      - `bracket_from_mad` number, nullable: Morocco, income tax scale only: the amount in dirhams above which the bracket starts (the part of the income over it, up to bracket_to_mad, is taxed at the rate).
      - `bracket_to_mad` number, nullable: Morocco, income tax scale only: the amount in dirhams at which the bracket ends, null for the last bracket.
      - `legal_basis` string: The article of the code the rate comes from.
      - `note` string, nullable: A note on the rate.
      - `source` SourceRef, required
        - `url` string, uri, required: The official page the record was read on.
        - `title` string, required: What the page is.
        - `retrieved` string, required: The day the page was read, as YYYY-MM-DD.
    - `flat_tax` TaxRate[], nullable, required: The flat tax of micro-businesses (Algeria: the IFU, one record per regime; Morocco: the auto-entrepreneur flat tax, one record per kind of activity). Null when the dataset of the country does not cover it.
      - `code` string, required: A short stable name for the rate.
      - `rate_percent` number, nullable, required: The rate, in percent. Null when the tax is a fixed amount: see minimum_dzd, minimum_tnd or minimum_mad.
      - `label` string, required: The name of the rate, in the language of the request.
      - `applies_to` string, nullable: What the rate applies to.
      - `effective` string, nullable: The date or period the rate applies from, when the text gives one.
      - `minimum_tnd` number, nullable: Tunisia: a minimum amount in dinars (the minimum tax), null otherwise.
      - `minimum_dzd` number, nullable: Algeria: a minimum amount in dinars (the minimum corporate income tax, the minimum IFU), null otherwise.
      - `threshold_dzd` number, nullable: Algeria, IFU only: the yearly turnover ceiling of the regime, in dinars.
      - `bracket_from_dzd` number, nullable: Algeria, income tax scale only: the amount in dinars above which the bracket starts (the part of the income over it, up to bracket_to_dzd, is taxed at the rate).
      - `bracket_to_dzd` number, nullable: Algeria, income tax scale only: the amount in dinars at which the bracket ends, null for the last bracket.
      - `minimum_mad` number, nullable: Morocco: a minimum amount in dirhams (the minimum contribution), null otherwise.
      - `threshold_mad` number, nullable: Morocco, auto-entrepreneur flat tax only: the yearly turnover ceiling of the regime, in dirhams.
      - `bracket_from_mad` number, nullable: Morocco, income tax scale only: the amount in dirhams above which the bracket starts (the part of the income over it, up to bracket_to_mad, is taxed at the rate).
      - `bracket_to_mad` number, nullable: Morocco, income tax scale only: the amount in dirhams at which the bracket ends, null for the last bracket.
      - `legal_basis` string: The article of the code the rate comes from.
      - `note` string, nullable: A note on the rate.
      - `source` SourceRef, required
        - `url` string, uri, required: The official page the record was read on.
        - `title` string, required: What the page is.
        - `retrieved` string, required: The day the page was read, as YYYY-MM-DD.
  - `meta` Meta, required
    - `country` string, nullable: ISO 3166-1 alpha-2 code of the country the answer is about, for example DZ. Present on every successful answer: null only for the list of countries.
    - `dataset` string, required: Identifier of the dataset the answer comes from.
    - `source` string, required: Name of the source, in the language of the request.
    - `source_url` string, required: The page that describes the source.
    - `licence` string, nullable, required: The licence of the dataset: CC BY 4.0 for the datasets UpGrowth publishes under it, otherwise null.
    - `licence_url` string, nullable, required: Link to the text of the licence, null when licence is null.
    - `attribution` string, required: The credit to give when the data is used, in the language of the request: UpGrowth, with a link to https://www.upgrowth.dz.
    - `updated` string, nullable, required: Day of the snapshot of the data, as YYYY-MM-DD. For the tax rates, social contributions and institutions: the day the official pages were read.
    - `notice` string: Datasets without an open licence only: why. A null licence never means public domain.
    - `help` object, required: A call to action to relay to the user, in the language of the request.
      - `text` string, required: One sentence to pass on to the user.
      - `url` string, uri, required: The contact page of UpGrowth to send the user to.
    - `total` integer: Number of results. Present on lists.
    - `limit` integer: Page size used. Paginated lists only.
    - `offset` integer: Results skipped. Paginated lists only.
    - `sommaire_years` integer[]: Journal Officiel search only: the years whose summaries are searched.
    - `free_years` integer[]: Calls with no key, Journal Officiel routes only: the years such a call may read.
    - `truncated` object: Calls with no key only: present when the answer holds fewer rows than matched, because such a call gets at most 10 rows and cannot page.
      - `returned` integer, required: Rows in this answer.
      - `total` integer, nullable: Rows that matched, null when unknown.
    - `free_note` string: Calls with no key only: says the list is not complete. Present with truncated.
    - `sources` SourceRef[]: Tunisian governorates and Moroccan regions only: every official page the list was read on.
      - `url` string, uri, required: The official page the record was read on.
      - `title` string, required: What the page is.
      - `retrieved` string, required: The day the page was read, as YYYY-MM-DD.
    - `disclaimer` Localized: The same text in the three languages of the site.
      - `fr` string
      - `ar` string
      - `en` string

## Other responses

- `400`: A parameter is missing or invalid. error.code names the problem and error.message says how to fix it.
- `401`: invalid_key: the Authorization header is malformed, or the key is unknown or revoked. A call without the header is never refused with this code, it uses the free tier.
- `403`: dataset_unavailable: the account of the key may not read the data of this country. access_denied: the account is not served. Neither says why. key_required: a call with no key asked for what needs one (a country other than Algeria, an older year of the Journal Officiel, a page of a search past the first). trial_ended: the trial of the account is over.
- `404`: not_found: the code, the issue or the section does not exist. country_not_available: the country is not live, or does not have this dataset yet; the message lists the live countries.
- `429`: rate_limited (more than about 30 requests in 10 seconds from one address), free_quota_exceeded (the free tier of the address is used up for today), quota_exceeded (the daily quota of the key is used up) or monthly_quota_exceeded (the monthly quota of the account is used up, on the plans that have one) or trial_quota (the 1,000 calls of a trial are used up, which does not reset). Retry-After says when to try again.
- `503`: unavailable: a call with a key could not be counted right now. Retry in a moment.

---

[API](https://skmtc.dev/upgrowth/apis/upgrowth-algerian-business-data-api.md) · [All operations](https://skmtc.dev/upgrowth/apis/upgrowth-algerian-business-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/upgrowth/apis/upgrowth-algerian-business-data-api/revisions/76dce93244ad?raw)
