Die Ginto-API (GraphQL)

Letzte Aktualisierung: 
26/7/2025
API
App
Web
Bevor du startest

Die API ist geschützt und kann nur aufgerufen werden, wenn die Anfrage mithilfe eines API-Schlüssels authentifiziert wird. Dieser muss bei jeder Anfrage als Bearer-Token im Authorization-Header angegeben werden. Wende dich an support@ginto.guide, um einen API-Schlüssel für die API-Autorisierung zu erhalten.

Hinweis

Wenn du bereits eine Schnittstelle zu einem unserer Partnerorganisationen hast, zum Beispiel zum AccommoDataHub von Hotellerie Suisse, kannst du einige Informationen auch von dort beziehen.

Profi-Tipp

Nutze unseren Ginto-Test-Workspace in Postman, um die verschiedenen Abfragen zu testen.

Das findest du in dieser Anleitung:

Häufig gestellte Fragen

Endpunkte

#
0

Endpunkt für die produktive Umgebung.

POST api.ginto.guide/graphql

Endpunkt für die Testumgebung:

POST api.dev.ginto.guide/graphql

Autorisierung

#
1

Der API-Schlüssel muss bei jeder Anfrage als Bearer Token im Authorization-Header bereitgestellt werden:

Authorization: Bearer {token}

Der API-Schlüssel kann durch eine kurze Nachricht an support@ginto.guide angefordert werden.

Datenschema

#
3

Aufteilung in Seiten (Paginierung)

#
4

Das Konzept basiert auf Verbindungen und Kanten, die in GraphQL ein Quasi-Standard für die Paginierung sind. Bei Abfragen, die eine Paginierung ermöglichen, können die Argumente first und after sowie eine angeforderte pageInfo festgelegt werden. Das erste Argument definiert, wie viele Elemente mit der Anfrage zurückgegeben werden sollen. Aus Leistungsgründen darf dieser Wert nicht höher als 50 sein. Die pageInfo enthält einen endCursor, der den Cursor des letzten Elements auf der Seite definiert. Dieser endCursor kann dann für das after-Argument der nächsten Anfrage verwendet werden, um die nachfolgenden Elemente nach dem endCursor zu erhalten. Die Parameter zur Steuerung der Seitennummerierung sind im Schema dokumentiert.

Für die erste Seite muss kein after-Argument festgelegt werden. Die folgende Anfrage gibt die ersten 50 Einträge zusammen mit einer pageInfo zurück, die den endCursor der Seite enthält.

{
    allEntries(first: 50) {
        totalCount
        pageInfo {
            hasNextPage
            endCursor
        }
        edges {
            node {
                id
                name
            }
        }
    }
}

Um die nächsten 50 Einträge anzufordern, nehmen wir den endCursor der vorherigen Antwort und setzen ihn wie folgt für das After-Argument der nächsten Anforderung:

{
    allEntries(first: 50, after: "NTA") {
        totalCount
        pageInfo {
            hasNextPage
            endCursor
        }
        edges {
            node {
                id
                name
            }
        }
    }
}

Sprache einstellen

#
5

Die Standardsprache der zurückgegebenen Daten kann durch setzen des HTTP-Headers Accept-Language ausgewählt werden. Derzeit werden die Optionen de (Deutsch), en (Englisch), fr (Französisch) und it (Italienisch) unterstützt.

Hier findest du weitere Informationen zum HTTP header Accept-Language.

Bei Texten, die in mehreren Sprachen verfügbar sind, kann auch über das Feld Argument eine bestimmte Sprache festgelegt werden.

Alle Einträge abrufen

#
6
{
    allEntries {
        totalCount
        pageInfo {
            hasNextPage
            endCursor
        }
        edges {
            node {
                id
                sourceIds(sourceKey: "zuerst")   // at the moment only available for business users
                name
								position {
                    street
                    housenumber
                    postcode
                    city
                    lat
                    lng
                }
                externalRatings(sourceKey: "zuerst") {
                    iconUrl
                    descriptionDE: description(locale: DE)
                    descriptionFR: description(locale: FR)
                    descriptionIT: description(locale: IT)
                    descriptionEN: description(locale: EN)
                    grade
                }
                publication {
                    iconUrl
                    iconTextDE: iconText(locale: DE)
                    iconTextFR: iconText(locale: FR)
                    iconTextIT: iconText(locale: IT)
                    iconTextEN: iconText(locale: EN)
                    linkUrl
                    linkTextDE: linkText(locale: DE)
                    linkTextFR: linkText(locale: FR)
                    linkTextIT: linkText(locale: IT)
                    linkTextEN: linkText(locale: EN)
                }
            }
        }
    }
}

Einzelnen Eintrag nach ID abrufen

#
7
{
	entry(entryId: "ee659e74-295f-4285-8c3d-d90f232efa44") {
    entryId
    name
    externalRatings(sourceKey: "zuerst") {
      iconUrl
      description
      grade
    }
    publication {
      linkUrl
      linkText
    }
    licenseInfo {
      license
      attribution
      isOpenData
    }
    manualWheelchairAccessibility: accessibility(ratingProfileId: "Z2lkOi8vcmFpbHMtYXBwL1JhdGluZ1Byb2ZpbGVzOjpSYXRpbmdQcm9maWxlLzc4") {
      grade
      conformance
  	}
    powerWheelchairAccessibility: accessibility(ratingProfileId: "Z2lkOi8vcmFpbHMtYXBwL1JhdGluZ1Byb2ZpbGVzOjpSYXRpbmdQcm9maWxlLzc5") {
      grade
      conformance
  	}
    pushchairAccessibility: accessibility(ratingProfileId: "Z2lkOi8vcmFpbHMtYXBwL1JhdGluZ1Byb2ZpbGVzOjpSYXRpbmdQcm9maWxlLzgw") {
      grade
      conformance
  	}
  }
}

Einträge nach Koordinaten und Namen abrufen

#
8
{
    entriesBySearch(lat: 47.4224806, lng: 9.3760095, query: "palace", within: 5) {
        totalCount
        pageInfo {
            hasNextPage
            endCursor
        }
        edges {
            node {
                id
                name
								position {
                    street
                    housenumber
                    postcode
                    city
                    lat
                    lng
                }
                publication {
                    iconUrl
                    iconTextDE: iconText(locale: DE)
                    iconTextFR: iconText(locale: FR)
                    iconTextIT: iconText(locale: IT)
                    iconTextEN: iconText(locale: EN)
                    linkUrl
                    linkTextDE: linkText(locale: DE)
                    linkTextFR: linkText(locale: FR)
                    linkTextIT: linkText(locale: IT)
                    linkTextEN: linkText(locale: EN)
                }
            }
        }
    }
}

To request the next 50 entries we take the endCursor of the previous response and set it for the after argument of the next request as follows:

Filtern

#
9
{
  entriesByFilter(filterId: "Z2lkOi8vcmFpbHMtYXBwL0dyb3VwaW5nOjpFbnRyeUdyb3VwL2U2Y2I1ZTU4LTE0MDQtNDk5Mi05YjY1LTlkNjc1MTJmZTRiMg", first: 50, after: "NTA") {
    totalCount
		pageInfo {
    	hasNextPage
      endCursor
    }
    edges {
      node {
        id
        sourceIds(sourceKey: "parks.swiss")   // at the moment only available for business users
        name
        externalRatings(sourceKey: "zuerst") {
          iconUrl
          description
          grade
        }
        publication {
          iconUrl
          iconText
          linkUrl
          linkText
        }
        licenseInfo {
          license
          attribution
          isOpenData
        }
		    wheelchairAccessibility: accessibility(ratingProfileId: "Z2lkOi8vcmFpbHMtYXBwL1JhdGluZ1Byb2ZpbGVzOjpSYXRpbmdQcm9maWxlLzc4") {
		      grade
		      conformance
		  	}
      }
    }
  }
}

Im folgenden Beispiel werden alle Eingabefilter abgerufen, für die ein:e Nutzer:in berechtigt ist. Die ID kann dann für die Abfrage entriesByFilter verwendet werden.

{ 
	entryFilters {
    		id
    		name
    		createdAt
    		updatedAt
    		categoryKeys
    		sources
    		qualityLevels
    		postcodes
    }
 }‍

Einträge einer bestimmten Quelle abrufen

#
10
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

Code

So wie bei PI jetzt

Liste aller Bedürfnisprofile abrufen

#
11
{
	ratingProfiles {
    id
    name
  }
}

Outro

Zugänglichkeit pro Raum

#
20
  1. St

siehe auch E-Mail von Julian an MC von G vom 16. Oktober 2024

Outro - RichText

Häufig gestellte Fragen

Zu dieser Anleitung gibt es bisher keine häufig gestellten Fragen.

Das könnte dich auch interessieren