Lune Sustainability page API

Share your impact via a public page.

Operations 5

POST /sustainability-pages Create a sustainability page #
PUT /sustainability-pages Update a sustainability page #
GET /sustainability-pages/current-account Get the current account's sustainability page #
GET /sustainability-pages/public/{type}/{slug} Get a sustainability page #
GET /sustainability-pages/public/{organisation_id}/{type}/{handle} Get a sustainability page #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/lune:lune-sustainability-page-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

lune-sustainability-page-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Lune Sustainability page API
  version: '1.0'
  contact:
    name: Lune Support
    email: support@lune.co
  termsOfService: https://lune.co/terms
  description: 'Operations tagged Sustainability page across 2 of this provider''s published API definitions: openapi.yml, lune-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.lune.co/v1
  description: Lune's REST API
tags:
- name: Sustainability page
  description: Share your impact via a public page.
  x-lune-component: SustainabilityPage
paths:
  /sustainability-pages:
    post:
      tags:
      - Sustainability page
      summary: Create a sustainability page
      operationId: createSustainabilityPage
      description: Create a public https://sustainability.lune.co/ page to communicate your climate impact efforts.
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SustainabilityPageRequest'
      responses:
        '200':
          description: OK
          x-lune-response-component: SustainabilityPage
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SustainabilityPage'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '409':
          $ref: '#/components/responses/Conflict'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    put:
      tags:
      - Sustainability page
      summary: Update a sustainability page
      operationId: updateSustainabilityPage
      description: Update the format, layout and status of your public https://sustainability.lune.co/ page.
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SustainabilityPageRequest'
      responses:
        '200':
          x-lune-response-component: SustainabilityPage
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SustainabilityPage'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '409':
          $ref: '#/components/responses/Conflict'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    servers:
    - url: https://api.lune.co/v1
      description: Lune's REST API
  /sustainability-pages/current-account:
    get:
      tags:
      - Sustainability page
      summary: Get the current account's sustainability page
      operationId: getSustainabilityPage
      description: Get the configuration of the current account's sustainability page.
      security:
      - BearerAuth: []
      responses:
        '200':
          x-lune-response-component: SustainabilityPage
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SustainabilityPage'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    servers:
    - url: https://api.lune.co/v1
      description: Lune's REST API
  /sustainability-pages/public/{type}/{slug}:
    get:
      tags:
      - Sustainability page
      summary: Get a sustainability page
      operationId: getPublicSustainabilityPageBySlug
      description: Get the current account's public sustainability summary info.
      parameters:
      - name: type
        in: path
        required: true
        description: The type of the sustainability page.
        schema:
          $ref: '#/components/schemas/AccountType'
      - name: slug
        in: path
        required: true
        description: The slug of the sustainability page.
        schema:
          type: string
          example: acme
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSustainabilityPage'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    servers:
    - url: https://api.lune.co/v1
      description: Lune's REST API
  /sustainability-pages/public/{organisation_id}/{type}/{handle}:
    get:
      tags:
      - Sustainability page
      summary: Get a sustainability page
      operationId: getPublicSustainabilityPageByHandle
      description: Get the current account's public sustainability summary info.
      parameters:
      - name: organisation_id
        in: path
        required: true
        description: The unique identifier of the organisation this account belongs to
        schema:
          example: VndoQ0PZjGMzvYOZGwqy6kbgN1eOJx9B
          type: string
      - name: type
        in: path
        required: true
        description: The type of the sustainability page.
        schema:
          $ref: '#/components/schemas/AccountType'
      - name: handle
        in: path
        required: true
        description: The handle of the sustainability page's account.
        schema:
          type: string
          example: acme
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSustainabilityPage'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    servers:
    - url: https://api.lune.co/v1
      description: Lune's REST API
components:
  schemas:
    SustainabilityPage:
      description: 'A Sustainability Page represents the entity which enables accounts or client accounts to share their impact publicly.


        Upon the first retirement, the Sustainability Page displays certificates with proof of the retired carbon credits and beneficiary.

        '
      type: object
      required:
      - status
      - slug
      - title
      - description
      - custom_description
      - sections
      properties:
        status:
          $ref: '#/components/schemas/SustainabilityPageStatus'
        slug:
          $ref: '#/components/schemas/SustainabilityPageSlug'
        title:
          $ref: '#/components/schemas/SustainabilityPageTitle'
        description:
          oneOf:
          - $ref: '#/components/schemas/SustainabilityPageDescription'
          - $ref: '#/components/schemas/NullEnum'
        custom_description:
          $ref: '#/components/schemas/SustainabilityPageCustomDescription'
        sections:
          $ref: '#/components/schemas/SustainabilityPageSectionsNullable'
    SustainabilityPageCustomDescription:
      type:
      - string
      - 'null'
      description: The sustainability page custom description. Only displayed when `description` is set to `by_custom_description`.
      example: This is a custom description
    SustainabilityPageSections:
      type: array
      description: The sustainability page sections that will be displayed in the page. Only a single instance of each section type is allowed and the order is irrelevant.
      minItems: 0
      maxItems: 3
      items:
        $ref: '#/components/schemas/SustainabilityPageSection'
      example:
      - bundles_breakdown
      - certificates
    CarbonPermanence:
      type: string
      description: The bundle's carbon storage permanence.
      enum:
      - long_term
      - short_term
      - no_storage
      example: long_term
    SustainabilityPageTitle:
      type: string
      description: The sustainability page title stat format.
      enum:
      - by_volume
      - by_price
      example: by_volume
    SustainabilityPageStatus:
      type: string
      enum:
      - enabled
      - disabled
      description: The sustainability page status which determines whether it is visible to the public.
      example: enabled
    Error:
      type: object
      description: Individual error information
      required:
      - error_code
      - message
      properties:
        error_code:
          type: string
          description: Immutable string representing a specific error.
          example: account_suspended
          enum:
          - api_version_invalid
          - account_suspended
          - bundle_selection_ratios_invalid
          - bundle_selection_bundle_invalid
          - order_idempotency_already_exists
          - order_quantity_invalid
          - order_value_invalid
          - bundle_id_invalid
          - id_invalid
          - distance_invalid
          - test_account_name_update_disallowed
          - validation_error
          - bundle_selection_ratios_invalid_format
          - address_not_found
          - port_not_found
          - locode_not_found
          - airport_invalid
          - webhook_limit_reached
          - time_range_invalid
          - exchange_rate_not_found
          - live_account_required
          - unauthorised
          - estimate_not_found
          - estimate_order_already_placed
          - sustainability_page_slug_not_unique
          - sustainability_page_exists
          - pagination_limit_invalid
          - unsupported_image_format
          - source_location_code_invalid
          - destination_location_code_invalid
          - emission_factor_id_invalid
          - emission_factor_unit_mismatch
          - emission_factor_gated
          - account_scope_incorrect
          - service_unavailable
          - handle_not_unique
          - estimate_idempotency_already_exists
          - airport_route_required
          - future_departure_invalid
          - transaction_document_inference_failure
          - transaction_document_creation_failure
          - invalid_selected_account_id
          - account_idempotency_already_exists
          - account_handle_idempotency_key_inconsistency
          - shipment_batch_idempotency_already_exists
          - route_not_found
          - insufficient_credits
          - client_account_mismatch
        message:
          type: string
          description: 'Human readable error message.


            This value can contain some extra information about the error in

            human-readable form. Not suitable for programmatic consumption, the format

            is not guaranteed to be stable.

            '
    PublicSustainabilityPage:
      type: object
      required:
      - title
      - description
      - include_certificates
      - bundles
      - un_sdg
      - logo
      - organisation_logo
      - account_name
      description: The public sustainability summary page for a given account.
      properties:
        title:
          description: The sustainability page title format and info.
          oneOf:
          - type: object
            x-lune-name: By value
            required:
            - format
            - currency
            - value
            properties:
              format:
                type: string
                enum:
                - by_price
              currency:
                $ref: '#/components/schemas/CurrencyCode'
                example: GBP
              value:
                $ref: '#/components/schemas/MonetaryAmountValue'
          - type: object
            x-lune-name: By quantity
            required:
            - format
            - quantity
            properties:
              format:
                type: string
                enum:
                - by_volume
              quantity:
                type: string
                description: The total quantity of tCO2 offset by all completed orders.
                example: '500.667'
                pattern: ^[0-9]+(\.[0-9]+)?$
        description:
          oneOf:
          - $ref: '#/components/schemas/NullEnum'
          - type: object
            x-lune-name: New York to London flights
            required:
            - format
            - flights_nyc_to_london
            properties:
              format:
                type: string
                enum:
                - by_equivalent
              flights_nyc_to_london:
                type: number
                description: The number of one-way flights from NYC to London the emissions of which are an equivalent to the CO2 reduction.
                example: 10
          - type: object
            x-lune-name: UN SDGs and projects
            required:
            - format
            - number_of_un_sdgs
            - number_of_projects
            properties:
              format:
                type: string
                enum:
                - by_supported_goals
              number_of_un_sdgs:
                type: number
                description: The number of supported UN Sustainable Development Goals (SDGs).
                example: 10
              number_of_projects:
                type: number
                description: The number of supported carbon offset projects.
                example: 10
          - type: object
            x-lune-name: Custom description
            required:
            - format
            - custom_description
            properties:
              format:
                type: string
                enum:
                - by_custom_description
              custom_description:
                type:
                - string
                - 'null'
                description: The custom description of the sustainability page provided in the configuration.
                example: This is a custom description
        logo:
          type:
          - string
          - 'null'
          description: The sustainability page logo URL.
          example: https://client-assets.lune.co/XheugMiTUHynItnaYSvCF.png
        organisation_logo:
          type:
          - string
          - 'null'
          description: The organisation logo
          example: https://client-assets.lune.co/XheugMiTUHynItnaYSvCF.png
        account_name:
          type: string
          description: The name of the account for which the sustainability page is generated.
          example: Acme
        include_certificates:
          type: boolean
          description: Whether to include the certificates section in the sustainability page.
          example: true
        bundles:
          type:
          - array
          - 'null'
          description: The sustainability page bundle percentages and details.
          items:
            type: object
            required:
            - percent_of_total
            - bundle
            - quantity
            properties:
              percent_of_total:
                type: number
                description: The volume of emissions offset via this bundle as a percentage of all offset emissions.
                example: 25
              quantity:
                type: string
                description: The quantity of tCO2 offset via this bundle.
                example: '667.667'
                pattern: ^[0-9]+(\.[0-9]+)?$
              bundle:
                type: object
                required:
                - name
                - background_colour
                - primary_image
                - primary_image_hires
                - small_thumbnail
                - description
                - offset_type
                - carbon_permanence
                properties:
                  name:
                    type: string
                    description: The bundle's name
                    example: Latin America Forestry
                  background_colour:
                    type:
                    - string
                    - 'null'
                    description: A bundle's background colour in hexadecimal format
                    example: '#AABBCC'
                  primary_image:
                    type:
                    - string
                    - 'null'
                    description: A bundle's image URL
                    example: https://assets.lune.co/bundles/latin-america-forestry.png
                  primary_image_hires:
                    type:
                    - string
                    - 'null'
                    description: A bundle's high resolution image URL
                    example: https://assets.lune.co/bundles/latin-america-hires.jpg
                  small_thumbnail:
                    type:
                    - string
                    - 'null'
                    description: A bundle's small thumbnail image URL
                    example: https://assets.lune.co/bundles/latin-america-thumbnail.jpg
                  description:
                    type:
                    - string
                    - 'null'
                    description: The bundle's description
                    example: A conglomeration of renewable energy projects around the world
                  offset_type:
                    type:
                    - string
                    - 'null'
                    description: 'Offset type classification

                      '
                    enum:
                    - emissions_reduction
                    - carbon_removal
                    - null
                    example: emissions_reduction
                  carbon_permanence:
                    $ref: '#/components/schemas/CarbonPermanence'
        un_sdg:
          $ref: '#/components/schemas/SupportedUNSdg'
    ErrorResponse:
      x-lune-name: Error response
      description: 'An error response containing the error details.


        The `error` property provides information about the type of error that occurred.

        Use this property for error handling.


        The `errors` array is present for backwards compatibility purposes. It always

        contains a single error element which is the same seen in the `error` property.

        '
      type: object
      required:
      - errors
      - error
      properties:
        errors:
          type: array
          description: An array containing errors
          items:
            $ref: '#/components/schemas/Error'
        error:
          $ref: '#/components/schemas/Error'
    SustainabilityPageDescription:
      type: string
      x-lune-name: Description
      description: The sustainability page description format consisting of stat equivalents or a custom description.
      enum:
      - by_equivalent
      - by_supported_goals
      - by_custom_description
      example: by_equivalent
    SustainabilityPageSection:
      type: string
      description: The sustainability page section name.
      enum:
      - bundles_breakdown
      - certificates
      - unsdg
      example: bundles_breakdown
    SustainabilityPageRequest:
      type: object
      required:
      - status
      - slug
      - title
      - sections
      properties:
        status:
          $ref: '#/components/schemas/SustainabilityPageStatus'
        slug:
          $ref: '#/components/schemas/SustainabilityPageSlug'
        title:
          $ref: '#/components/schemas/SustainabilityPageTitle'
        description:
          oneOf:
          - $ref: '#/components/schemas/SustainabilityPageDescription'
          - $ref: '#/components/schemas/NullEnum'
        custom_description:
          $ref: '#/components/schemas/SustainabilityPageCustomDescription'
        sections:
          $ref: '#/components/schemas/SustainabilityPageSections'
    CurrencyCode:
      x-lune-name: Currency code
      type: string
      description: 'ISO 4217 3 character currency code.


        Note: Lune supports most but not all currency codes.

        '
      example: GBP
      enum:
      - AED
      - AFN
      - ALL
      - AMD
      - ANG
      - AOA
      - ARS
      - AUD
      - AWG
      - AZN
      - BAM
      - BBD
      - BDT
      - BGN
      - BHD
      - BIF
      - BMD
      - BND
      - BOB
      - BRL
      - BSD
      - BTC
      - BTN
      - BWP
      - BYN
      - BYR
      - BZD
      - CAD
      - CDF
      - CHF
      - CLF
      - CLP
      - CNY
      - CNH
      - COP
      - CRC
      - CUC
      - CUP
      - CVE
      - CZK
      - DJF
      - DKK
      - DOP
      - DZD
      - EGP
      - ERN
      - ETB
      - EUR
      - FJD
      - FKP
      - GBP
      - GEL
      - GGP
      - GHS
      - GIP
      - GMD
      - GNF
      - GTQ
      - GYD
      - HKD
      - HNL
      - HRK
      - HTG
      - HUF
      - IDR
      - ILS
      - IMP
      - INR
      - IQD
      - IRR
      - ISK
      - JEP
      - JMD
      - JOD
      - JPY
      - KES
      - KGS
      - KHR
      - KMF
      - KPW
      - KRW
      - KWD
      - KYD
      - KZT
      - LAK
      - LBP
      - LKR
      - LRD
      - LSL
      - LTL
      - LVL
      - LYD
      - MAD
      - MDL
      - MGA
      - MKD
      - MMK
      - MNT
      - MOP
      - MRU
      - MUR
      - MVR
      - MWK
      - MXN
      - MYR
      - MZN
      - NAD
      - NGN
      - NIO
      - NOK
      - NPR
      - NZD
      - OMR
      - PAB
      - PEN
      - PGK
      - PHP
      - PKR
      - PLN
      - PYG
      - QAR
      - RON
      - RSD
      - RUB
      - RWF
      - SAR
      - SBD
      - SCR
      - SDG
      - SEK
      - SGD
      - SHP
      - SLE
      - SLL
      - SOS
      - SRD
      - STD
      - SVC
      - SYP
      - SZL
      - THB
      - TJS
      - TMT
      - TND
      - TOP
      - TRY
      - TTD
      - TWD
      - TZS
      - UAH
      - UGX
      - USD
      - UYU
      - UZS
      - VES
      - VND
      - VUV
      - WST
      - XAF
      - XAG
      - XAU
      - XCD
      - XDR
      - XOF
      - XPF
      - YER
      - ZAR
      - ZMK
      - ZMW
      - ZWL
    AccountType:
      type: string
      description: 'The account''s type.

        '
      enum:
      - live
      - test
      example: live
    NullEnum:
      type:
      - string
      - 'null'
      x-lune-name: 'Null'
      description: The property is set to `null`.
      enum:
      - null
    MonetaryAmountValue:
      type: string
      pattern: ^[0-9]+(\.[0-9]+)?$
      description: 'Specify the monetary value in the currency defined by the `currency_code` property in the request. If no `currency_code` is provided, the currency will default to that of the associated account.

        '
      example: '3.14'
    SupportedUNSdg:
      type:
      - array
      - 'null'
      description: 'The list of supported UN Sustainable Development Goals (SDGs).


        The array is sorted by the goal number (the `un_sdg_number` property), ascending.

        '
      items:
        type: object
        required:
        - un_sdg_number
        - occurrences
        properties:
          un_sdg_number:
            type: number
            description: The number which identifies the specific UN SDG.
            example: 1
          occurrences:
            type: number
            description: The total number of projects supporting this UN SDG.
            example: 5
    SustainabilityPageSectionsNullable:
      type:
      - array
      - 'null'
      description: The sustainability page sections that will be displayed in the page. Only a single instance of each section type is allowed and the order is irrelevant.
      minItems: 0
      maxItems: 3
      items:
        $ref: '#/components/schemas/SustainabilityPageSection'
      example:
      - bundles_breakdown
      - certificates
    SustainabilityPageSlug:
      type: string
      description: The sustainability page slug. The slug is used to identify the page publicly and should be unique.
      example: acme
      pattern: ^[a-z0-9.-]+$
  responses:
    NotFound:
      description: The specified resource was not found
    TooManyRequests:
      description: Too many requests have been made in a short period of time
    Unauthorized:
      description: The API Key is missing or is invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    UnsupportedMediaType:
      description: The payload format is in an unsupported format.
    BadRequest:
      description: The request is invalid. Parameters may be missing or are invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    PayloadTooLarge:
      description: The request is larger than 100kB.
    Conflict:
      description: The request could not be completed due to a conflict with the current state of the target resource or resources
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: Authorization Bearer API Key (see <a href="#section/Authentication">Authentication</a>)
    AccessToken:
      type: apiKey
      in: query
      name: access_token
      description: 'An API key used to access a resource that accepts it in the URL.


        Note: Lune API keys are not URL-safe, which means that they can''t be included in URLs directly.

        They need to be percent-encoded using a function like JavaScript''s [`encodeURIComponent()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) or

        Python''s [`urllib.parse.quote()`](https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote).

        '
x-refined-from:
- openapi.yml
- lune-openapi.yml