ArztAPI API-Referenz
Willkommen bei ArztAPI! Diese Dokumentation bietet einen umfassenden Leitfaden, um unsere GraphQL-API effektiv zu nutzen und auf aktuelle, strukturierte Daten zu Gesundheitsdienstleistern und Einrichtungen in Deutschland zuzugreifen.
Erste Schritte
1. API-Schlüssel erhalten
Um die ArztAPI zu nutzen, benötigen Sie einen API-Schlüssel. API-Schlüssel werden verwendet, um Ihre Anfragen zu authentifizieren und Ihre Nutzung zu verfolgen.
Sie können einen API-Schlüssel erhalten, indem Sie sich auf unserer Plattform unter arztapi.de/signup anmelden (Hinweis: Der Link ist ein Platzhalter für die tatsächliche Anmeldeseite).
Nach der Registrierung finden Sie Ihren API-Schlüssel in Ihrem Konto-Dashboard. Bitte halten Sie Ihren API-Schlüssel vertraulich.
2. API-Endpunkt
Alle API-Anfragen müssen an den folgenden GraphQL-Endpunkt gesendet werden:
https://api.arztapi.com/functions/v1/api-gateway
3. Authentifizierung
Authentifizieren Sie Ihre API-Anfragen, indem Sie Ihren API-Schlüssel im x-api-key
-HTTP-Header übermitteln.
Beispiel:
x-api-key: YOUR_API_KEY
Ersetzen Sie YOUR_API_KEY
durch den tatsächlichen API-Schlüssel, den Sie erhalten haben.
Anfragen stellen
Die ArztAPI verwendet GraphQL. Alle Anfragen müssen als POST
-Anfragen mit einem JSON-Body an den API-Endpunkt gesendet werden.
Der JSON-Body muss ein Feld query
enthalten und kann optional ein Feld variables
enthalten, wenn Ihre Abfrage Variablen verwendet.
Beispielanfrage mit cURL:
curl --location 'https://api.arztapi.com/functions/v1/api-gateway' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"query": "query GetFirstProfessional { professionalsCollection(first: 1) { edges { node { id first_name last_name title } } } }",
"variables": {}
}'
Denken Sie daran, YOUR_API_KEY
durch Ihren tatsächlichen API-Schlüssel zu ersetzen.
GraphQL verstehen
Wenn Sie neu bei GraphQL sind, finden Sie hier einige grundlegende Konzepte:
- Abfragen: Lesevorgänge zum Abrufen von Daten. Sie geben genau an, welche Daten Sie benötigen.
- Felder: Die spezifischen Datenelemente, die Sie zu einem Objekt abrufen möchten (z. B.
first_name
,email
). - Argumente: Parameter, die Sie an Felder übergeben können, um die zurückgegebenen Daten zu beeinflussen (z. B. eine
id
, um einen bestimmten Professional abzurufen, oderfirst: 5
, um die Anzahl der Ergebnisse zu begrenzen). - Variablen: Eine Möglichkeit, dynamische Werte in Ihre Abfragen einzubringen.
- Sammlungen: Dienen zum Abfragen von Listen von Elementen (z. B.
professionalsCollection
). Diese liefern normalerweise ein Arrayedges
, wobei jeder Edge einnode
(das tatsächliche Datenobjekt) und einencursor
(für die Paginierung) enthält. Sammlungen enthalten auch häufigtotalCount
. - Knoten: Einzelne Datenobjekte (z. B. ein bestimmter Professional oder eine Einrichtung).
Verfügbare Daten (Schemaübersicht)
Die ArztAPI bietet Zugriff auf verschiedene Arten von Gesundheitsdaten. Nachfolgend finden Sie eine Übersicht über die wichtigsten Datenentitäten und einige ihrer Schlüsselfelder. Sie können diese als Sammlungen (z.B. professionalsCollection
) oder als einzelne Knoten abfragen, wenn eine ID bekannt ist (z.B. professional(id: "...")
).
Hinweis zur Feldverfügbarkeit:
Die genauen verfügbaren Felder können mittels GraphQL-Introspektion ermittelt werden. Die nachstehenden Listen heben häufig verwendete Felder hervor. Nicht alle Felder sind für jeden Datensatz notwendigerweise gefüllt.
Professionals
Repräsentiert einzelne Fachkräfte im Gesundheitswesen (Ärzte, Zahnärzte, etc.).
- Query Collection:
professionalsCollection
- Query Single:
professional(id: "...")
- Key Fields:
id
,provider_kind
,first_name
,last_name
,title
,gender
,language
(array),email
,phone
,tags
(JSON),source_url
. - Nested Collections:
facilitiesCollection
,specialisationsCollection
.
Einrichtungen
Repräsentiert Gesundheitseinrichtungen wie Kliniken, Krankenhäuser und Praxen.
- Query Collection:
facilitiesCollection
- Query Single:
facility(id: "...")
- Key Fields:
id
,facility_type
,name
,website
,email
,phone
,fax
,location_id
. - Nested Objects/Collections:
location
(object),openingHoursCollection
,professionalFacilityRolesCollection
.
Standorte
Repräsentiert physische Adressen.
- Query Collection:
locationsCollection
- Query Single:
location(id: "...")
- Key Fields:
id
,street
,zip_code
,city
,state
,country
,latitude
,longitude
,wheelchair_accessible
.
Öffnungszeiten
Repräsentiert die Öffnungszeiten von Einrichtungen.
- Query Collection:
openingHoursCollection
(typischerweise unter einer Einrichtung verschachtelt) - Query Single:
openingHour(id: "...")
- Key Fields:
id
,weekday
,open_time
,close_time
,notes
.
Professional-Einrichtungs-Rollen
Verknüpft Professionals mit Einrichtungen und definiert deren Rolle oder Zugehörigkeit.
- Query Collection:
professionalFacilityRolesCollection
(typischerweise verschachtelt) - Query Single:
professionalFacilityRole(id: "...")
- Key Fields:
id
,role
,contact_email
,contact_phone
,opening_hours
(JSON),krankenkassen
(array).
Fachliche Spezialisierungen von Professionals
Verknüpft Professionals mit ihren medizinischen Spezialisierungen.
- Query Collection:
professionalSpecialisationsCollection
(typischerweise verschachtelt) - Query Single:
professionalSpecialisation(id: "...")
- Key Fields:
id
,specialisation_id
. - Nested Objects:
specialisation
(object).
Spezialisierungen
Repräsentiert medizinische Spezialisierungen.
- Query Collection:
specialisationsCollection
- Query Single:
specialisation(id: "...")
- Key Fields:
id
,slug
,name_de
,name_en
,synonyms_de
(array),code
.
Abfragen erstellen
Hier sind einige Beispiele, die Ihnen helfen, Ihre GraphQL-Abfragen zu erstellen.
1. Grundlegende Sammlungsabfrage
Rufen Sie die ersten 5 Professionals und deren Namen ab.
query GetProfessionals {
professionalsCollection(first: 5) {
edges {
node {
id
first_name
last_name
title
}
}
totalCount
}
}
2. Abfragen spezifischer Felder
Sie entscheiden, welche Felder Sie benötigen. Um beispielsweise nur die E-Mail-Adresse und Telefonnummer des ersten Professionals abzurufen:
query GetProfessionalContact {
professionalsCollection(first: 1) {
edges {
node {
id
email
phone
}
}
}
}
3. Abfragen eines einzelnen Knotens nach ID
Rufen Sie einen bestimmten Professional anhand seiner ID ab.
query GetProfessionalById {
professional(id: "your-professional-id") {
id
first_name
last_name
}
}
Ersetzen Sie your-professional-id
durch eine tatsächliche ID.
4. Verwendung von Argumenten und Filtern
Filtern Sie Professionals nach Nachnamen. (Die vollständigen Filterfunktionen finden Sie in der pg_graphql-Dokumentation).
query FilterProfessionals {
professionalsCollection(filter: { last_name: { eq: "Mustermann" } }) {
edges {
node {
id
first_name
last_name
}
}
}
}
5. Abfragen verschachtelter Daten
Rufen Sie Professionals und die zugehörigen Spezialisierungen ab.
query GetProfessionalsWithSpecialisations {
professionalsCollection(first: 2) {
edges {
node {
id
first_name
last_name
specialisationsCollection {
edges {
node {
specialisation {
id
name_de
}
}
}
}
}
}
}
}
6. Verwendung von Variablen
Gestalten Sie Ihre Abfragen dynamisch mithilfe von Variablen.
Abfrage:
query GetProfessionalByLastName($lastName: String!) {
professionalsCollection(filter: { last_name: { eq: $lastName } }, first: 5) {
edges {
node {
id
first_name
last_name
}
}
}
}
JSON-Body für die Anfrage (einschließlich Variablen):
{
"query": "query GetProfessionalByLastName($lastName: String!) { professionalsCollection(filter: { last_name: { eq: $lastName } }, first: 5) { edges { node { id first_name last_name } } } }",
"variables": {
"lastName": "Schmidt"
}
}
Filterung & Paginierung
Filterung
Unsere API unterstützt leistungsstarke Filterfunktionen, die von pg_graphql bereitgestellt werden. Sie können die meisten Felder mithilfe verschiedener Operatoren filtern (z.B. eq
, neq
, gt
, lt
, in
, like
usw.).
Beispiel: Finden Sie Professionals in einer bestimmten Stadt.
query ProfessionalsInCity {
professionalsCollection(
filter: {
facilitiesCollection: {
some: {
location: { city: { eq: "Berlin" } }
}
}
}
) {
edges {
node {
id
first_name
last_name
}
}
}
}
Detaillierte Informationen zu allen verfügbaren Filteroptionen finden Sie in der pg_graphql-Dokumentation zu Filtern.
Paginierung
Sammlungen unterstützen cursor-basierte Paginierung mithilfe der Argumente first
und after
.
first: Int
: Gibt die Anzahl der zurückzugebenden Elemente an.after: String
: Nimmt einen Cursor (erhalten vonpageInfo.endCursor
oder einemedge.cursor
einer vorherigen Abfrage), um den nächsten Satz von Elementen abzurufen.
Um Paginierungsinformationen zu erhalten, fügen Sie pageInfo true
in Ihre Sammlungsabfrage ein.
query PaginatedProfessionals {
professionalsCollection(first: 10) {
edges {
node {
id
first_name
}
cursor
}
pageInfo {
endCursor
hasNextPage
}
totalCount
}
}
# Um die nächste Seite abzurufen:
# professionalsCollection(first: 10, after: "WERT_DES_ENDCURSOR_AUS_VORHERIGER_ABFRAGE") {
# id
# first_name
# last_name
# ...
# }
Ratenbegrenzung & Credits
Die API-Nutzung wird über ein Credit-System bemessen. Jede Abfrage verbraucht eine bestimmte Anzahl an Credits, abhängig von ihrer Komplexität und der angeforderten Datenmenge. Ihr API-Plan beinhaltet ein monatliches Credit-Kontingent.
Wenn Sie Ihr monatliches Credit-Limit überschreiten, erhalten Sie möglicherweise einen 429 Too Many Requests
Fehler. Details zu Ihrer aktuellen Nutzung und Ihren Limits finden Sie in Ihrem Konto-Dashboard.
Die Kosten einer Abfrage werden basierend auf den angeforderten Datentypen und spezifischen Feldern berechnet. Im Allgemeinen verbrauchen Anfragen nach mehr Feldern oder komplexeren verschachtelten Daten mehr Credits. Felder, die leer oder null sind, werden nicht auf die Credit-Nutzung angerechnet.
Fehlerbehandlung
Die API verwendet Standard-HTTP-Statuscodes, um den Erfolg oder Misserfolg einer Anfrage anzuzeigen.
200 OK
: Anfrage war erfolgreich. Der Antwortkörper enthält die angeforderten Daten oder GraphQL-Fehler, falls die Abfrage ungültig war.400 Bad Request
: Die Anfrage war fehlerhaft (z.B. ungültiges JSON, ungültige GraphQL-Abfragesyntax).401 Unauthorized
: API-Schlüssel fehlt.403 Forbidden
: API-Schlüssel ist ungültig, inaktiv, keinem Plan zugeordnet, der Plan ist inaktiv oder die Abfrage versucht, auf nicht zulässige Felder/Operationen zuzugreifen.429 Too Many Requests
: Sie haben Ihr API-Credit-Limit überschritten.500 Internal Server Error
: Auf unserem Server ist ein unerwarteter Fehler aufgetreten.
GraphQL-Fehler (auch bei einem HTTP-Status 200 OK) werden im errors
-Array der JSON-Antwort enthalten sein:
{
"errors": [
{
"message": "Cannot query field \"nonExistentField\" on type \"ProfessionalNode\".",
"locations": [ { "line": 6, "column": 9 } ]
}
]
}
Support
Wenn Sie Fragen haben, auf Probleme stoßen oder Unterstützung benötigen, kontaktieren Sie bitte unser Support-Team unter support@arztapi.de oder besuchen Sie unsere Kontaktseite unter arztapi.de/kontakt.