{
  "openapi": "3.1.0",
  "info": {
    "title": "Marco Collin Stolk — openbare diensten-API",
    "version": "1.0.0",
    "description": "Read-only public service catalog. No authentication, sign-up or payment required. Does not submit inquiries or bookings. Stable v1: existing fields retain their meaning. Breaking changes use a new version. All operations are read-only, safe to retry and require no Idempotency-Key. Cache for 300 seconds; back off on temporary errors.",
    "contact": {
      "name": "Marco Collin Stolk",
      "email": "contact@marcostolk.nl",
      "url": "https://marcostolk.nl/#contact"
    }
  },
  "servers": [
    {
      "url": "https://marcostolk.nl"
    }
  ],
  "security": [],
  "externalDocs": {
    "url": "https://marcostolk.nl/docs.html"
  },
  "paths": {
    "/api/v1/services.json": {
      "get": {
        "operationId": "getServiceCatalog",
        "summary": "Lees diensten, prijsafspraken en contactgegevens",
        "description": "Use when comparing AI coaching in Limburg or finding how to contact Marco. Returns public information only. No account or API key needed.",
        "tags": [
          "Services"
        ],
        "responses": {
          "200": {
            "description": "Current public service catalog",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "name",
                    "description",
                    "contact",
                    "services",
                    "start_session",
                    "booking"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "contact": {
                      "type": "object",
                      "properties": {
                        "email": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        }
                      }
                    },
                    "services": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          },
                          "suitable_for": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "start_session": {
                      "type": "object",
                      "properties": {
                        "price": {
                          "type": "number"
                        },
                        "currency": {
                          "type": "string"
                        },
                        "vat_included": {
                          "type": "boolean"
                        },
                        "duration": {
                          "type": "string"
                        },
                        "terms": {
                          "type": "string"
                        }
                      }
                    },
                    "booking": {
                      "type": "string"
                    },
                    "pagination": {
                      "type": "object",
                      "description": "The whole catalog is returned in one response; no next page.",
                      "properties": {
                        "total": {
                          "type": "integer"
                        },
                        "has_more": {
                          "type": "boolean",
                          "const": false
                        },
                        "next_cursor": {
                          "type": "null"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "name": "Marco Collin Stolk",
                  "description": "Praktische AI-begeleiding voor ondernemers en teams in Heerlen en Limburg.",
                  "contact": {
                    "email": "contact@marcostolk.nl",
                    "url": "https://marcostolk.nl/#contact"
                  },
                  "services": [
                    {
                      "id": "persoonlijke-ai-begeleiding",
                      "name": "Persoonlijke AI-begeleiding in Limburg",
                      "description": "Persoonlijke AI-begeleiding voor ondernemers in Heerlen en Limburg. Oefen op je eigen laptop met werk dat je herkent, samen met Marco Collin Stolk.",
                      "url": "https://marcostolk.nl/persoonlijke-ai-begeleiding.html",
                      "suitable_for": "Voor zelfstandige ondernemers en kleine bedrijven die nog weinig ervaring met AI hebben. Je hoeft geen technische kennis mee te brengen. Wel een werkvraag waarmee je wilt oefenen."
                    },
                    {
                      "id": "ai-training-teams",
                      "name": "Praktische AI-training voor teams in Limburg",
                      "description": "Een praktische AI-training voor jouw team in Limburg. Oefen met herkenbare werkzaamheden en maak duidelijke afspraken over gebruik en controle.",
                      "url": "https://marcostolk.nl/ai-training-teams.html",
                      "suitable_for": "Voor kleine bedrijven en teams binnen grotere organisaties. Een afgebakende vraag van één team is een goed begin. De inhoud stemmen we af op jullie ervaring en werkzaamheden."
                    },
                    {
                      "id": "werkprocessen-verbeteren",
                      "name": "Terugkerend werk verbeteren met AI",
                      "description": "Maak terugkerend werk eenvoudiger met Marco Collin Stolk in Limburg. Kies één taak, probeer een oplossing en beoordeel wat die in de praktijk oplevert.",
                      "url": "https://marcostolk.nl/werkprocessen-verbeteren.html",
                      "suitable_for": "Voor ondernemers en teams die een concrete taak willen verbeteren. Je hoeft de oplossing nog niet te kennen. We beginnen met hoe het werk nu gaat en wat je daarin lastig vindt."
                    }
                  ],
                  "start_session": {
                    "name": "Persoonlijke AI-startsessie",
                    "price": 295,
                    "currency": "EUR",
                    "vat_included": false,
                    "duration": "Twee uur",
                    "participants": 1,
                    "terms": "Op locatie binnen 20 kilometer van Heerlen zijn reiskosten inbegrepen. Buiten dit gebied spreken we vooraf een totaalprijs af. Eventuele softwarekosten bespreken we vooraf.",
                    "url": "https://marcostolk.nl/#startaanbod"
                  },
                  "booking": "Vraag een vrijblijvende kennismaking aan. Geen automatische boeking of betaling. Maatwerk wordt vooraf aangeboden met inhoud, prijs en afspraken.",
                  "pagination": {
                    "total": 3,
                    "has_more": false,
                    "next_cursor": null
                  }
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "description": "Private, no-store because rate counters are per client.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "60 requests per minute.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current window ends.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Machine-readable problem. Check the path and use GET or HEAD.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    },
                    "instance": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Machine-readable problem. Check the path and use GET or HEAD.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    },
                    "instance": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Machine-readable problem. Check the path and use GET or HEAD.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "type",
                    "title",
                    "status",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    },
                    "instance": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}