Inleiding tot de Slides API
De Google Slides API is een REST-API waarmee je programmatisch presentaties kunt aanmaken, lezen en aanpassen. Typische use cases zijn:
- Automatisch rapport-presentaties genereren uit data
- Tekst of afbeeldingen vervangen in een sjabloon (mail merge voor slides)
- Consistente branding afdwingen over meerdere presentaties
- Dia's samenvoegen uit meerdere bronbestanden
De API is beschikbaar via directe REST-aanroepen, de Google API Client Libraries (Python, Node.js, Java, Go) en Google Apps Script.
Authenticatie instellen
De Slides API vereist OAuth 2.0 of een serviceaccount.
Voor persoonlijk gebruik of kleine scripts gebruik je OAuth 2.0:
OAuth 2.0 opzetten in de Cloud Console
- Ga naar de Google Cloud Console.
- Maak een project aan of selecteer een bestaand project.
- Activeer de Google Slides API via APIs & Services en dan Library.
- Maak OAuth 2.0-aanmeldingsgegevens aan (type: Desktop application).
- Download de
credentials.json.
Voor server-side automatisering gebruik je een serviceaccount en deel je de presentatie met het serviceaccount-e-mailadres. Geef het serviceaccount alleen toegang tot de bestanden die het echt nodig heeft.
Houd je sleutels uit versiebeheer
Sla credentials.json en serviceaccount-sleutels nooit op in je repository. Gebruik omgevingsvariabelen of Google Secret Manager, en roteer sleutels regelmatig.
Presentatie ophalen
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
creds = Credentials.from_authorized_user_file('token.json')
service = build('slides', 'v1', credentials=creds)
presentation = service.presentations().get(
presentationId='PRESENTATION_ID'
).execute()
slides = presentation.get('slides')
print(f'Presentatie heeft {len(slides)} dia(s)')
De presentationId vind je in de URL van je presentatie: docs.google.com/presentation/d/PRESENTATION_ID/edit.
Tekst vervangen via batchUpdate
De krachtigste methode is batchUpdate, waarmee je meerdere wijzigingen in één aanroep doorstuurt. Dat is efficiënter en telt voor je quotum als één write-verzoek per batch:
requests = [
{
'replaceAllText': {
'containsText': {'text': '{{NAAM}}', 'matchCase': True},
'replaceText': 'Jan de Vries'
}
},
{
'replaceAllText': {
'containsText': {'text': '{{DATUM}}', 'matchCase': True},
'replaceText': '1 juni 2026'
}
}
]
service.presentations().batchUpdate(
presentationId='PRESENTATION_ID',
body={'requests': requests}
).execute()
Dit is de basis van een mail-merge systeem voor presentaties: maak een sjabloon met placeholders en vervang ze via de API met variabele data.
Afbeelding vervangen
requests = [
{
'replaceAllShapesWithImage': {
'imageUrl': 'https://example.com/foto.jpg',
'imageReplaceMethod': 'CENTER_INSIDE',
'containsText': {'text': '{{FOTO}}'}
}
}
]
Zorg dat afbeeldingen bereikbaar zijn
Gebruik openbaar toegankelijke afbeeldings-URLs, of upload afbeeldingen eerst naar Google Drive en gebruik de Drive-URL met openbare leesrechten. De API moet de afbeelding kunnen ophalen op het moment van de aanroep.
Presentatie aanmaken vanuit sjabloon
De aanbevolen workflow is:
Sjabloon kopiëren en vullen
- Maak een sjabloon-presentatie handmatig in Slides met placeholders zoals
{{NAAM}}. - Kopieer het bestand via de Drive API met
drive.files().copy(fileId='TEMPLATE_ID', body={'name': 'Nieuwe presentatie'}). - Vervang de placeholders in de kopie via de Slides API met
batchUpdate.
from googleapiclient.discovery import build
drive = build('drive', 'v3', credentials=creds)
slides = build('slides', 'v1', credentials=creds)
kopie = drive.files().copy(
fileId='TEMPLATE_ID',
body={'name': f'Rapport {datum}'}
).execute()
nieuwe_id = kopie['id']
slides.presentations().batchUpdate(
presentationId=nieuwe_id,
body={'requests': vervang_requests}
).execute()
Werk altijd op een kopie en nooit rechtstreeks op het sjabloon, anders raken je placeholders na de eerste run definitief overschreven.
Apps Script als alternatief
Voor gebruikers zonder Python-ervaring is Google Apps Script een laagdrempeliger alternatief. De SlidesApp-service biedt directe toegang tot presentaties zonder externe authenticatie:
function vervangTekst() {
const presentatie = SlidesApp.openById('PRESENTATION_ID');
presentatie.replaceAllText('{{NAAM}}', 'Jan de Vries');
}
Quota en limieten
Standaard gebruik van de Slides API is op dit moment gratis. Google heeft aangekondigd dat het overschrijden van de quotumlimieten later in 2026 kosten kan opleveren op je Cloud-factuur. Houd daarom rekening met de actuele limieten en bouw exponential backoff in.
De officiële limieten (per project, controleer de documentatie voor de laatste stand):
| Type verzoek | Per minuut per project | Per minuut per gebruiker |
|---|---|---|
| Leesverzoeken | 3.000 | 600 |
| Schrijfverzoeken | 600 | 60 |
| Thumbnail (dure read) | 300 | 60 |
Bij overschrijding krijg je een 429-statuscode. Vang die op met een retry met exponentieel oplopende wachttijd, en bundel waar mogelijk wijzigingen in één batchUpdate om verzoeken te besparen.
Wat zijn de quotumlimieten van de Slides API?
Per project geldt standaard ongeveer 600 schrijfverzoeken en 3.000 leesverzoeken per minuut. Per gebruiker is dat ongeveer 60 schrijf- en 600 leesverzoeken per minuut. Je kunt een verhoging aanvragen via de Cloud Console, maar dat wordt niet gegarandeerd toegekend.
Kan ik via de API dia-overgangen of animaties instellen?
Nee. De Slides API ondersteunt het lezen en schrijven van dia-inhoud en opmaak, maar niet de overgangen tussen dia's of element-animaties.
Welke bestandsformaten kan ik exporteren?
Het exporteren gaat via de Drive API met het files.export-endpoint. Je kunt onder meer naar PDF en PPTX exporteren, en per dia een afbeelding ophalen als PNG of JPEG via het thumbnail-endpoint.
Is de Slides API gratis?
Standaard gebruik is op dit moment gratis. Google heeft wel aangekondigd dat het overschrijden van de quotumlimieten later in 2026 in rekening gebracht kan worden op je Cloud-factuur, dus controleer de actuele voorwaarden voor productiegebruik.
Wat is het verschil tussen OAuth 2.0 en een serviceaccount?
OAuth 2.0 werkt namens een ingelogde gebruiker en is geschikt voor scripts en desktoptools. Een serviceaccount werkt zonder gebruiker en is bedoeld voor server-side automatisering. Bij een serviceaccount moet je de presentatie expliciet delen met het serviceaccount-e-mailadres.
Praktijkvoorbeeld: weekrapporten
Een typisch praktijkgeval is een wekelijks rapport dat automatisch gegenereerd wordt uit een Google Spreadsheet:
- Lees data uit de Spreadsheet via de Sheets API.
- Kopieer het sjabloon via de Drive API.
- Vervang placeholders in de kopie via de Slides API.
- Stuur de link naar het rapport via de Gmail API.
Dit hele proces automatiseer je met een Cloud Run-functie die elke maandag wordt getriggerd via Cloud Scheduler.