> ## Documentation Index
> Fetch the complete documentation index at: https://developer.hayinsights.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Vietnam GDP by sector — time series

> Every period of `type` in one call, oldest first — for charts, instead of one call
per period. Each point carries the period fields of the
[periods](/api-reference/macro/vietnam-gdp-by-sector-periods) endpoint and the four
values of the requested `sectors`; row names are listed once in `data.sectors`.
Every point equals the [single-period](/api-reference/macro/vietnam-gdp-by-sector)
response for that period, including the derived Q1 2026.

`priceBasis` changes from `constant_2010` to `constant_2020` at Q1 2026: do not chain
`constantPrice` levels across the change; `yoyGrowth` stays comparable.

Ask only for the rows you plot: all 28 rows of the quarterly series is about 100 KB,
three rows about 14 KB.

Source: National Statistics Office of Viet Nam (www.nso.gov.vn).




## OpenAPI

````yaml /openapi.yaml get /openapi/v1/macro/vietnam/gdp-by-sector/series
openapi: 3.1.0
info:
  title: HayInsights Open API
  version: 0.1.0
  description: >
    Programmatic access to the **HayInsights** financial-data hub — commodities,

    crypto, ETF, FX, macroeconomic, real-estate, news, economic-calendar and

    market-index datasets, served from a single API surface under
    `/openapi/v1/*`.


    This specification is the **single source of truth** for the public API

    surface — shared by SDK codegen, the reference docs, and (later) the mock

    server / contract tests.


    ## Authentication


    Every request must carry your API key in the `X-API-Key` header. There is a

    single authentication tier — no request signing. Create and manage keys in

    the HayInsights dashboard (Account → API keys). See **Authentication**.


    ## Plans & quota


    Access to each data domain and your request quota are governed by the

    subscription plan attached to your key. Each endpoint consumes a
    **weighted**

    amount of your per-minute quota; every response carries `X-RateLimit-*`

    headers. See **Rate limits** and **Plans & features**.
  contact: {}
servers:
  - url: https://api-v2.hayinsights.com
    description: Production
security:
  - HayInsightsApiKey: []
tags:
  - name: Commodities
    description: >-
      Spot prices, top movers, gold–DXY correlation and historical series for
      energy, metals and agricultural commodities.
  - name: Crypto
    description: >-
      Crypto market overview, dominance, bubble map, on-chain and derivatives
      metrics.
  - name: ETF
    description: >-
      Exchange-traded fund listings, performance & net-flow rankings, heatmap,
      holdings, NAV growth, fund composition and Bank of Japan ETF holdings.
  - name: FX
    description: >-
      Foreign-exchange summary, live table, 90-day correlation matrix and the
      emerging-market stress monitor.
  - name: Macro
    description: >-
      Macroeconomic indicators — GDP, CPI/PCE, exchange rates, population,
      central-government debt, policy rates / bond yields, interbank rates, FDI,
      trade by region and the manufacturing PMI.
  - name: Real Estate
    description: >-
      Land prices, transaction-level records, administrative geography
      (provinces / wards) and choropleth GeoJSON, by country.
  - name: News
    description: >-
      Market news headlines with per-article sentiment, plus an aggregate
      sentiment reading over a rolling window.
  - name: Calendar
    description: >-
      Economic calendar — rate decisions, CPI and GDP releases, market holidays
      and asset-level events.
  - name: Market
    description: >-
      Index snapshots and global index closes — levels and daily moves for S&P
      500, Nasdaq, Nikkei, VN-Index and others.
  - name: Equities
    description: >-
      Japanese stock detail (Tokyo Stock Exchange) — end-of-day snapshot,
      corporate events, daily prices, financial statements and sector peers —
      plus Vietnamese stock (HOSE / HNX / UPCoM) daily prices and financial
      statements.
paths:
  /openapi/v1/macro/vietnam/gdp-by-sector/series:
    get:
      tags:
        - Macro
      summary: Vietnam GDP by sector — time series
      description: >
        Every period of `type` in one call, oldest first — for charts, instead
        of one call

        per period. Each point carries the period fields of the

        [periods](/api-reference/macro/vietnam-gdp-by-sector-periods) endpoint
        and the four

        values of the requested `sectors`; row names are listed once in
        `data.sectors`.

        Every point equals the
        [single-period](/api-reference/macro/vietnam-gdp-by-sector)

        response for that period, including the derived Q1 2026.


        `priceBasis` changes from `constant_2010` to `constant_2020` at Q1 2026:
        do not chain

        `constantPrice` levels across the change; `yoyGrowth` stays comparable.


        Ask only for the rows you plot: all 28 rows of the quarterly series is
        about 100 KB,

        three rows about 14 KB.


        Source: National Statistics Office of Viet Nam (www.nso.gov.vn).
      operationId: macroVietnamGdpBySectorSeries
      parameters:
        - name: type
          in: query
          required: false
          description: >
            Period type. Case-insensitive.


            | Value | Periods | Source |

            | --- | --- | --- |

            | `quarter` | single quarters, Q1 2021 onward | NSO quarterly
            socio-economic report |

            | `ytd` | year-to-date: 6, 9 and 12 months, 2021 onward | NSO
            quarterly socio-economic report |

            | `annual` | full years, 2010 onward | NSO statistical database
            (national accounts) |


            Quarterly and year-to-date data start in 2021, the first year NSO
            reported on its

            revised GDP scale; earlier quarterly reports used the old scale
            (about 27% lower)

            and are not comparable. `annual` covers 2010 onward on the revised
            scale.
          schema:
            type: string
            enum:
              - quarter
              - ytd
              - annual
            default: quarter
            example: quarter
        - name: from
          in: query
          required: false
          description: >-
            First period (inclusive), in the `period` format of `type`
            (`2021-Q1`, `2021-06`, `2016`). Omit to start from the oldest.
          schema:
            type: string
            example: 2021-Q1
        - name: to
          in: query
          required: false
          description: Last period (inclusive). Omit to end at the latest.
          schema:
            type: string
            example: 2026-Q3
        - name: sectors
          in: query
          required: false
          description: >-
            Comma-separated `sectorCode`s, e.g. `total,manufacturing,services`.
            Omit for all 28 rows. An unknown code returns 400.
          schema:
            type: string
            example: total,manufacturing
      responses:
        '200':
          description: The series, oldest first.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MacroGdpSectorSeriesResponse'
              example:
                success: true
                statusCode: 200
                data:
                  country: vn
                  type: quarter
                  latestPeriod: 2026-Q3
                  sectors:
                    - sectorCode: total
                      sectorName: Gross domestic product
                      sectorShortName: Gross domestic product
                      sectorNameVi: Tổng số
                      level: 0
                      parentCode: null
                  points:
                    - period: 2021-Q1
                      label: Q1 2021
                      estimateStatus: preliminary
                      priceBasis: constant_2010
                      knowledgeAt: '2021-06-29T01:41:48.000Z'
                      wasRestated: true
                      derived: false
                      sectors:
                        - sectorCode: total
                          currentPrice: 1953117
                          constantPrice: 1194374
                          shareOfGdp: 100
                          yoyGrowth: 4.650437
                    - period: 2026-Q3
                      label: Q3 2026
                      estimateStatus: estimate
                      priceBasis: constant_2020
                      knowledgeAt: '2026-10-03T01:00:06.000Z'
                      wasRestated: false
                      derived: false
                      sectors:
                        - sectorCode: total
                          currentPrice: 3698333.989507
                          constantPrice: 3004778.442597
                          shareOfGdp: 100
                          yoyGrowth: 9.947988
                meta:
                  source: National Statistics Office of Viet Nam (www.nso.gov.vn)
                  source_url: https://www.nso.gov.vn
                  as_of: 2026-Q3
                  display_unit: Billion VND
                  classification:
                    currentPrice: RAW
                    constantPrice: RAW
                    shareOfGdp: RAW
                    yoyGrowth: DERIVED
                  classification_derived_points:
                    currentPrice: COMPUTED
                    constantPrice: COMPUTED
                    shareOfGdp: COMPUTED
                    yoyGrowth: COMPUTED
                  formula_version: gdp-vn-sector-v1
                  served_from_cache: false
                  cache_expires_at: '2026-11-03T07:10:49.165Z'
                  timestamp: '2026-11-02T07:10:49.165Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    MacroGdpSectorSeriesResponse:
      allOf:
        - $ref: '#/components/schemas/EnvelopeBase'
        - type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/GdpSectorSeries'
            meta:
              $ref: '#/components/schemas/GdpSectorMeta'
    EnvelopeBase:
      type: object
      description: >
        Standard success envelope shared by every endpoint. Each operation's
        response

        wrapper extends this (via `allOf`) and adds a typed `data` property.
      required:
        - success
        - statusCode
      properties:
        success:
          type: boolean
          const: true
          description: Always `true` for a successful response.
          example: true
        statusCode:
          type: integer
          description: Mirrors the HTTP status code.
          example: 200
        meta:
          $ref: '#/components/schemas/Meta'
    GdpSectorSeries:
      type: object
      description: Every period of `type` in one response, oldest first, for charts.
      required:
        - country
        - type
        - latestPeriod
        - sectors
        - points
      properties:
        country:
          type: string
          enum:
            - vn
          example: vn
        type:
          type: string
          enum:
            - quarter
            - ytd
            - annual
          example: quarter
        latestPeriod:
          type:
            - string
            - 'null'
          example: 2026-Q3
        sectors:
          type: array
          description: >-
            The requested rows, in NSO's order. Names are listed here once, not
            in every point.
          items:
            $ref: '#/components/schemas/GdpSectorInfo'
        points:
          type: array
          description: >-
            One entry per period, oldest first. Each point equals the
            single-period response for that period.
          items:
            allOf:
              - $ref: '#/components/schemas/GdpSectorPeriodSummary'
              - type: object
                required:
                  - sectors
                properties:
                  sectors:
                    type: array
                    description: Values of the rows in `data.sectors`, same order.
                    items:
                      $ref: '#/components/schemas/GdpSectorValues'
    GdpSectorMeta:
      description: >
        Response metadata for Vietnam GDP by sector: where the numbers come
        from, their units,

        which fields HayInsights computes, and how fresh the response is.
      allOf:
        - $ref: '#/components/schemas/Meta'
        - type: object
          properties:
            source:
              type: string
              description: >-
                Data provider. NSO's terms require citing www.nso.gov.vn when
                reusing the data.
              example: National Statistics Office of Viet Nam (www.nso.gov.vn)
            source_url:
              type: string
              format: uri
              description: >-
                The NSO report for the period, or NSO's national-accounts page
                for annual data.
              example: >-
                https://www.nso.gov.vn/tin-tuc-thong-ke/2026/10/bao-cao-tinh-hinh-kinh-te-xa-hoi-quy-iii-va-9-thang-nam-2026/
            as_of:
              type:
                - string
                - 'null'
              description: Latest period with data for `type`.
              example: 2026-Q3
            knowledge_at:
              type:
                - string
                - 'null'
              format: date-time
              description: Same as `data.knowledgeAt` (single-period endpoint only).
              example: '2026-10-03T01:00:06.000Z'
            unit:
              type: object
              description: >-
                Unit of each value field — `VND` with scale 1e9 (billion VND) or
                `PERCENT`.
              additionalProperties:
                type: object
                properties:
                  unit:
                    type: string
                    example: VND
                  scale:
                    type: number
                    example: 1000000000
                  display:
                    type: string
                    example: Billion VND
            display_unit:
              type: string
              description: Unit label for the two value columns.
              example: Billion VND
            classification:
              type: object
              description: >
                How each field was produced: values and shares as NSO published
                them (RAW);

                growth converted to percent when NSO prints an index (DERIVED);
                every field of a

                derived period is COMPUTED.
              additionalProperties:
                type: string
                enum:
                  - RAW
                  - DERIVED
                  - COMPUTED
              example:
                currentPrice: RAW
                constantPrice: RAW
                shareOfGdp: RAW
                yoyGrowth: DERIVED
            classification_derived_points:
              type: object
              description: >-
                Series endpoint only — classification that applies to points
                with `derived: true`.
              additionalProperties:
                type: string
              example:
                currentPrice: COMPUTED
                constantPrice: COMPUTED
                shareOfGdp: COMPUTED
                yoyGrowth: COMPUTED
            formula_version:
              type: string
              description: Version tag of the HayInsights transformations.
              example: gdp-vn-sector-v1
            was_restated:
              type: boolean
              description: Same as `data.wasRestated` (single-period endpoint only).
              example: false
            served_from_cache:
              type: boolean
              example: false
            cache_expires_at:
              type:
                - string
                - 'null'
              format: date-time
              description: >-
                When the cached copy expires (24 h; dropped as soon as new data
                is collected).
              example: '2026-11-03T07:10:49.165Z'
    ErrorBody:
      type: object
      description: Standard error envelope returned for every 4xx / 5xx response.
      required:
        - success
        - statusCode
        - error
      properties:
        success:
          type: boolean
          const: false
          description: Always `false` for an error response.
          example: false
        statusCode:
          type: integer
          description: Mirrors the HTTP status code.
          example: 401
        error:
          $ref: '#/components/schemas/ErrorDetail'
        meta:
          $ref: '#/components/schemas/Meta'
    Meta:
      type: object
      description: >-
        Response metadata. Always present; `timestamp` is the server time the
        response was generated.
      required:
        - timestamp
      properties:
        timestamp:
          type: string
          format: date-time
          description: Server time when the response was generated (ISO 8601).
          example: '2026-06-19T08:31:59.478Z'
      additionalProperties: true
    GdpSectorInfo:
      type: object
      description: >-
        Name and position of one of the 28 rows, in the order NSO prints them
        (VSIC 2018).
      required:
        - sectorCode
        - sectorName
        - sectorShortName
        - sectorNameVi
        - level
        - parentCode
      properties:
        sectorCode:
          type: string
          description: >
            Stable row code: `total`, the three economic sectors
            `agriculture_forestry_fishing`,

            `industry_construction`, `services`, `product_taxes_less_subsidies`,
            and the industries

            under them (e.g. `manufacturing`, `construction`, `real_estate`).
          example: manufacturing
        sectorName:
          type: string
          description: Full English name (ISIC wording).
          example: Manufacturing
        sectorShortName:
          type: string
          description: Short English name for table cells and chart legends.
          example: Manufacturing
        sectorNameVi:
          type: string
          description: Vietnamese name as NSO prints it.
          example: Công nghiệp chế biến, chế tạo
        level:
          type: integer
          minimum: 0
          maximum: 3
          description: >-
            0 = GDP, 1 = economic sectors and product taxes, 2 = industries, 3 =
            sub-industries of industry. Children add up to their parent (source
            rounding under 1 billion VND).
          example: 3
        parentCode:
          type:
            - string
            - 'null'
          description: Code of the direct parent row; `null` for `total`.
          example: industry
    GdpSectorPeriodSummary:
      type: object
      description: >-
        One period of a GDP-by-sector series and the release its numbers come
        from.
      required:
        - period
        - label
        - estimateStatus
        - priceBasis
        - knowledgeAt
        - wasRestated
        - derived
      properties:
        period:
          type: string
          description: >-
            Period code, as accepted by `period`: `2026-Q3` (quarter), `2026-09`
            (year-to-date), `2025` (annual).
          example: 2026-Q3
        label:
          type: string
          description: >-
            Display label: `Q3 2026`, `9M 2026`, `FY 2025` (year-to-date, 12
            months), `2025` (annual).
          example: Q3 2026
        estimateStatus:
          type: string
          enum:
            - estimate
            - preliminary
            - official
          description: >
            How final the numbers are, as NSO labels them: `estimate` (first
            release),

            `preliminary` (revised in the next report, or a year marked
            preliminary),

            `official` (annual years published without a label). If cells
            differ, the least final

            label wins.
          example: estimate
        priceBasis:
          type:
            - string
            - 'null'
          enum:
            - constant_2010
            - constant_2020
            - null
          description: >-
            Base year of `constantPrice` and `yoyGrowth`. 2010 up to Q4 2025,
            2020 from Q1 2026; annual data uses 2010.
          example: constant_2020
        knowledgeAt:
          type: string
          format: date-time
          description: When NSO published the release returned (UTC).
          example: '2026-10-03T01:00:06.000Z'
        wasRestated:
          type: boolean
          description: >-
            NSO has revised this period's numbers since the first release (or
            the period is derived).
          example: false
        derived:
          type: boolean
          description: >
            `true` when the numbers are computed by HayInsights rather than
            printed by NSO.

            Today only Q1 2026: its latest revision is published only as the
            preliminary 6-month

            figure minus the preliminary Q2 figure (Q3 2026 report).
          example: false
    GdpSectorValues:
      type: object
      description: >
        The four values of one row for one period. A cell NSO does not publish
        is `null` —

        never 0. Values keep the 6 decimals of the source; round for display.
      required:
        - sectorCode
        - currentPrice
        - constantPrice
        - shareOfGdp
        - yoyGrowth
      properties:
        sectorCode:
          type: string
          description: Stable row code (see `GdpSectorRow`).
          example: total
        currentPrice:
          type:
            - number
            - 'null'
          description: >-
            Value at current prices, in billion VND. GDP for `total`, value
            added for the other rows.
          example: 3698333.989507
        constantPrice:
          type:
            - number
            - 'null'
          description: >
            Value at constant prices of the base year in `priceBasis`, in
            billion VND. Levels at

            2010 and 2020 prices cannot be chained.
          example: 3004778.442597
        shareOfGdp:
          type:
            - number
            - 'null'
          description: Share of GDP at current prices, in percent (`total` = 100).
          example: 100
        yoyGrowth:
          type:
            - number
            - 'null'
          description: >
            Growth at constant prices against the same period of the previous
            year, in percent.

            Can be negative. Quarter vs same quarter, year-to-date vs same
            year-to-date period,

            year vs previous year.
          example: 9.947988
    ErrorDetail:
      type: object
      description: Error detail object carried under `error` in the error envelope.
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: >
            Machine-readable error code. Specific for authentication / quota
            errors

            (e.g. `API_KEY_REQUIRED`, `API_KEY_INVALID`, `FEATURE_NOT_IN_PLAN`,

            `RATE_LIMIT_EXCEEDED`). For validation (400) and not-found (404) the
            code

            is currently `INTERNAL_ERROR` and the HTTP status carries the
            semantics.
          example: API_KEY_INVALID
        message:
          description: Human-readable message, or a list of validation messages (400).
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          example: Invalid API key
  responses:
    BadRequest:
      description: >-
        Invalid or missing parameter — bad enum, range, format, or a missing
        required query parameter.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
          example:
            success: false
            statusCode: 400
            error:
              code: INTERNAL_ERROR
              message:
                - >-
                  Invalid type parameter. Must be "gdp", "cpi", "pce", or
                  "import-export"
                - Type parameter is required
            meta:
              error: Bad Request
              statusCode: 400
              timestamp: '2026-06-19T08:34:08.081Z'
    Unauthorized:
      description: >-
        Missing, invalid, disabled or expired API key. Send a valid key in the
        `X-API-Key` header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
          example:
            success: false
            statusCode: 401
            error:
              code: API_KEY_INVALID
              message: Invalid API key
            meta:
              timestamp: '2026-06-19T08:34:08.023Z'
    Forbidden:
      description: >-
        Your subscription plan does not include this data feature, or your key's
        scope denies it.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
          example:
            success: false
            statusCode: 403
            error:
              code: FEATURE_NOT_IN_PLAN
              message: Your plan does not include this feature
            meta:
              timestamp: '2026-06-19T08:34:08.100Z'
    RateLimited:
      description: >
        Rate limit exceeded — you have consumed your plan's per-minute weight
        budget.

        Wait until `X-RateLimit-Reset` (or `Retry-After` seconds) then retry.
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/XRateLimitLimit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/XRateLimitRemaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/XRateLimitReset'
        X-RateLimit-Weight-Used:
          $ref: '#/components/headers/XRateLimitWeightUsed'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
          example:
            success: false
            statusCode: 429
            error:
              code: RATE_LIMIT_EXCEEDED
              message: Rate limit exceeded
            meta:
              timestamp: '2026-06-19T08:34:09.000Z'
    InternalError:
      description: Unexpected server error. Retry after a short exponential backoff.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
          example:
            success: false
            statusCode: 500
            error:
              code: INTERNAL_ERROR
              message: Internal server error
            meta:
              timestamp: '2026-06-19T08:34:10.000Z'
  headers:
    XRateLimitLimit:
      description: Your plan's request-weight budget per 1-minute window.
      schema:
        type: integer
        example: 1000
    XRateLimitRemaining:
      description: Remaining request weight in the current 1-minute window.
      schema:
        type: integer
        example: 997
    XRateLimitReset:
      description: Unix timestamp (seconds) when the current rate-limit window resets.
      schema:
        type: integer
        format: int64
        example: 1781857979
    XRateLimitWeightUsed:
      description: Request weight consumed by this call (see each endpoint's weight).
      schema:
        type: integer
        example: 3
    RetryAfter:
      description: Seconds to wait before retrying. Present on 429 responses.
      schema:
        type: integer
        example: 30
  securitySchemes:
    HayInsightsApiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: >
        Your HayInsights API key (prefixed `apk_`). Create and manage keys in
        the

        HayInsights dashboard (Account → API keys).


        Send it in the `X-API-Key` header on **every** request to
        `/openapi/v1/*`.

        Which data domains you may access and your request quota are both
        governed by

        the subscription plan attached to the key — see the **Plans & features**
        and

        **Rate limits** guides.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.