HelloSafe Quotes API

Price a trip and read the catalogue vocabulary.

Business capability
Quote & Submission Management BC-2110.60

Operations 2

GET /api/v1/travel/meta Reference data and key state #
POST /api/v1/travel/quotes Price a trip #

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/hellosafe-quotes-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 email required.

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

OpenAPI Specification

hellosafe-quotes-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: HelloSafe Travel Insurance Quotes API
  version: 1.0.0
  summary: Price and sell travel insurance from any travel product.
  description: 'A REST API that prices a trip against a multi-insurer travel insurance catalogue and returns comparable offers with their guarantees, then mints a tracked subscription link so the sale is attributed and paid as commission. Built for travel agencies, tour operators, OTAs, booking engines and travel apps that want to add travel insurance without becoming an insurer or holding a distribution licence.


    Every key ships with a free sandbox that returns deterministic fixtures in the exact live response shape, so an integration can be built and tested end to end before a single insurer is called.


    **Authentication** is a per-caller HMAC-SHA256 handshake, server to server. Send three headers:


    - `x-atlas-key-id`: your key id

    - `x-atlas-timestamp`: unix seconds, rejected beyond a 5 minute window

    - `x-atlas-signature`: `v2=` + hex HMAC-SHA256 of `${timestamp}.${METHOD}.${pathname}.${rawBody}`, keyed with your signing secret


    The signature covers the raw request body byte for byte. There is no CORS header on these responses: the signing secret must never reach a browser.'
  termsOfService: https://atlas.hellosafe.com/legal/terms
  contact:
    name: HelloSafe Atlas
    url: https://atlas.hellosafe.com/platform/api
    email: atlas@hellosafe.com
  x-logo:
    url: https://atlas.hellosafe.com/hellosafe-logo.svg
  license:
    name: Proprietary
    url: https://atlas.hellosafe.com/legal/terms
servers:
- url: https://atlas.hellosafe.com
  description: Production. Sandbox versus live is decided by your key, not by the URL.
security:
- AtlasKeyId: []
  AtlasTimestamp: []
  AtlasSignature: []
tags:
- name: Quotes
  description: Price a trip and read the catalogue vocabulary.
paths:
  /api/v1/travel/meta:
    get:
      tags:
      - Quotes
      operationId: getTravelMeta
      summary: Reference data and key state
      description: 'The vocabulary a caller would otherwise hard-code: the 15 trip types, the 26 funnel languages, the guarantee slugs with their English labels and groups, the guarantee states a response can carry, the request ceilings, and your key''s own environment and quota. Does not consume quota.'
      responses:
        '200':
          description: Reference data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MetaResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /api/v1/travel/quotes:
    post:
      tags:
      - Quotes
      operationId: createTravelQuote
      summary: Price a trip
      description: 'Prices one trip against the travel catalogue and returns the priced offers, cheapest first, each with its premium, its guarantee ceilings and its policy documents. Read-only: nothing is stored, no subscription is created and no attribution happens here.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteRequest'
            examples:
              twoWeeksInThailand:
                summary: One adult, two weeks in Thailand
                value:
                  trip:
                    intent: forTourism
                    startDate: '2026-09-10'
                    endDate: '2026-09-24'
                    countryResidence: FR
                    arrivalCountries:
                    - TH
                    travellers:
                    - age: 32
                    tripPrice: 1500
                    currency: EUR
                    shouldCoverCancellation: false
                    shouldCoverExtremeSports: false
                    isAnnual: false
                  language: en
      responses:
        '200':
          description: Priced offers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/QuotaExceeded'
        '502':
          description: Upstream pricing failed.
        '504':
          description: Upstream pricing timed out.
components:
  responses:
    Forbidden:
      description: The key does not carry the required scope.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing, expired or invalid signature.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    QuotaExceeded:
      description: Daily quota exhausted; resets at the next UTC midnight.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Malformed request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          examples:
          - UNAUTHORIZED
          - BAD_LANGUAGE
          - NO_TRAVELLERS
          - TOO_MANY_TRAVELLERS
          - QUOTA_EXCEEDED
      required:
      - error
    Trip:
      type: object
      required:
      - intent
      - startDate
      - endDate
      - countryResidence
      - arrivalCountries
      - travellers
      properties:
        intent:
          type: string
          description: Trip type.
          enum:
          - forTourism
          - schengenArea
          - annual
          - studyInternship
          - whv
          - cruise
          - digitalNomad
          - expat
          - groupTravel
          - rentalStay
          - mountainTrip
          - backToHome
          - humanitarianAuPair
          - toWork
          - cancellation
        startDate:
          type: string
          format: date
        endDate:
          type: string
          format: date
        countryResidence:
          type: string
          description: ISO 3166-1 alpha-2.
          pattern: ^[A-Z]{2}$
        arrivalCountries:
          type: array
          description: ISO 3166-1 alpha-2, up to 20 destinations.
          maxItems: 20
          items:
            type: string
            pattern: ^[A-Z]{2}$
        travellers:
          type: array
          description: One entry per traveller, up to 10.
          minItems: 1
          maxItems: 10
          items:
            type: object
            required:
            - age
            properties:
              age:
                type: integer
                minimum: 0
                maximum: 120
        tripPrice:
          type: number
          minimum: 0
          description: Insured trip cost. Required when shouldCoverCancellation is true.
        currency:
          type: string
          description: ISO 4217. Applies to tripPrice and studiesAmount.
          pattern: ^[A-Z]{3}$
        shouldCoverCancellation:
          type: boolean
          default: false
        shouldCoverExtremeSports:
          type: boolean
          default: false
        isAnnual:
          type: boolean
          default: false
          description: Forced true by the annual and expat trip types.
    Offer:
      type: object
      properties:
        id:
          type: integer
        name:
          type:
          - string
          - 'null'
        plan:
          type:
          - string
          - 'null'
        insurer:
          type: object
          properties:
            name:
              type:
              - string
              - 'null'
            logoUrl:
              type:
              - string
              - 'null'
              format: uri
        price:
          type: object
          properties:
            amount:
              type: number
            amountInCents:
              type: integer
            currency:
              type: string
            isStartingPrice:
              type: boolean
              description: true = a from price; the exact premium is set in the funnel.
            period:
              type:
              - string
              - 'null'
        guaranteeCurrency:
          type: string
          description: Currency the guarantee ceilings are expressed in.
        guarantees:
          type: object
          description: Keyed by guarantee slug (see GET /api/v1/travel/meta).
          additionalProperties:
            type: object
            properties:
              state:
                type: string
                enum:
                - value
                - included
                - actual_costs
                - per_day
                - return_ticket
                - trip_price
                - studies_amount
                - not_available
              value:
                type:
                - number
                - 'null'
        highlights:
          type: object
          properties:
            included:
              type: array
              items:
                type: string
            excluded:
              type: array
              items:
                type: string
        documents:
          type: object
          properties:
            cgvUrl:
              type:
              - string
              - 'null'
              format: uri
            ipidUrl:
              type:
              - string
              - 'null'
              format: uri
        position:
          type: integer
          description: Rank by premium, cheapest first.
    MetaResponse:
      type: object
      properties:
        ok:
          type: boolean
        apiVersion:
          type: string
        key:
          type: object
          properties:
            keyId:
              type: string
            mode:
              type: string
              enum:
              - sandbox
              - live
            scopes:
              type: array
              items:
                type: string
            quota:
              type: object
            lifetime:
              type: object
        trip:
          type: object
          properties:
            intents:
              type: array
              items:
                type: string
            languages:
              type: array
              items:
                type: string
            maxTravellers:
              type: integer
            maxDestinations:
              type: integer
            notes:
              type: array
              items:
                type: string
        guarantees:
          type: array
          items:
            type: object
            properties:
              slug:
                type: string
              label:
                type: string
              group:
                type: string
        states:
          type: array
          items:
            type: object
            properties:
              state:
                type: string
              meaning:
                type: string
    QuoteRequest:
      type: object
      required:
      - trip
      properties:
        trip:
          $ref: '#/components/schemas/Trip'
        language:
          type: string
          default: en
          description: Funnel language.
          enum:
          - bg
          - cs
          - da
          - de
          - el
          - en
          - es
          - et
          - fi
          - fr
          - hr
          - hu
          - is
          - it
          - lt
          - lv
          - mt
          - nl
          - 'no'
          - pl
          - pt
          - ro
          - sk
          - sl
          - sv
          - tr
    QuoteResponse:
      type: object
      properties:
        ok:
          type: boolean
        mode:
          type: string
          enum:
          - sandbox
          - live
        offers:
          type: array
          items:
            $ref: '#/components/schemas/Offer'
        unpricedCount:
          type: integer
          description: Catalogue offers that could not be priced for this trip.
        nearMissCount:
          type: integer
          description: Offers that would match if a filter were relaxed.
        trip:
          $ref: '#/components/schemas/Trip'
        quote:
          type: object
          properties:
            mode:
              type: string
            days:
              type: integer
            travellers:
              type: integer
            expiresAt:
              type: string
              format: date-time
        meta:
          type: object
          properties:
            apiVersion:
              type: string
            language:
              type: string
  securitySchemes:
    AtlasKeyId:
      type: apiKey
      in: header
      name: x-atlas-key-id
      description: Your key id, from partners.api_clients.
    AtlasTimestamp:
      type: apiKey
      in: header
      name: x-atlas-timestamp
      description: Unix seconds. Rejected beyond a 5 minute replay window.
    AtlasSignature:
      type: apiKey
      in: header
      name: x-atlas-signature
      description: v2=<hex HMAC-SHA256 of `${ts}.${METHOD}.${pathname}.${rawBody}`>.
externalDocs:
  description: Travel insurance API documentation
  url: https://atlas.hellosafe.com/platform/api