The Angebote API v1/v2 and Vorgaenge API v1/v2 have reached end of life and will be shut down on End of November 2026. Please migrate to the only actively supported version v3 before that date.

This guide focuses on endpoint-level migration. Review your client implementation for:

  • /v1/ or /v2/ URLs
  • generated clients based on old OpenAPI specifications
  • code that expects v2 302 responses and follows the Location header
  • code that stores only an ermittlungsId, because v3 result-list endpoints also require the vorgangsnummer
  • code that reads gemerkteAngebote from the Vorgaenge API, because this moved to the Angebote API v3

OpenAPI specifications

Use the current v3 OpenAPI specifications to regenerate clients or validate your implementation:

Existing Authorization flows can be reused.

Angebote API migration

Main changes

In v1 and parts of v2 the Angebote API could calculate offers directly from ErfassteDaten. v3 calculates offer result lists only for an existing Vorgang. This means that clients must first create or update the Vorgang and then call the Angebote API v3 with the vorgangsnummer.

Alternative use Vorschlaege API for calculations without an existing Vorgang.

v3 also changes the calculation flow:

  • The calculation endpoint is now POST /v3/vorgaenge/{vorgangsnummer}/ergebnisliste.
  • Calculation options such as alternativen, produktAnbieter, exkludierteProduktAnbieter and provisionsAusgabe are sent in the JSON request body, not as query parameters.
  • A successful calculation returns 200 with a result list or 204 if no result list is available. v2 clients must no longer expect a 302 response with a Location header.
  • Follow-up reads use both vorgangsnummer and ergebnislisteId.

Example v3 calculation request:

POST /v3/vorgaenge/ABC123/ergebnisliste
Authorization: Bearer <access-token>
Content-Type: application/json
X-TraceId: <trace-id>

{
  "ermitteln": true,
  "aktualisieren": false,
  "alternativen": true,
  "produktAnbieter": ["PRODUKTANBIETER_ID"],
  "exkludierteProduktAnbieter": [],
  "provisionsAusgabe": true
}

Angebote API v1 to v3

v1 endpointv3 endpoint or replacementMigration notes
POST /v1/finanzierungsvorschlaegeNo equivalent Angebote API v3 endpoint. Use Vorschlaege API for calculations without an existing Vorgang, or create/update a Vorgang first and then call Angebote API v3.v3 does not accept ErfassteDaten directly.
GET /v1/finanzierungsvorschlaege/{vorgangsNummer}POST /v3/vorgaenge/{vorgangsnummer}/ergebnislisteChange GET to POST. Move query options into the JSON request body. Adjust response handling to v3 result-list responses.

Angebote API v2 to v3

v2 endpointv3 endpoint or replacementMigration notes
POST /v2/ergebnisliste/ermittlung with ErfassteDaten body and no vorgangsNummerNo equivalent Angebote API v3 endpoint. Use Vorschlaege API for calculations without an existing Vorgang, or create/update a Vorgang first and then call Angebote API v3.v3 requires {vorgangsnummer} in the path.
POST /v2/ergebnisliste/ermittlung?vorgangsNummer=...POST /v3/vorgaenge/{vorgangsnummer}/ergebnislisteMove vorgangsNummer from query parameter to path. Move options from query parameters into the request body. Replace 302/Location handling with 200/204 handling.
GET /v2/ergebnisliste/ermittlung/{ermittlungsId}GET /v3/vorgaenge/{vorgangsnummer}/ergebnisliste/{ergebnislisteId}v3 requires the Vorgang number and the v3 ergebnislisteId. The old ermittlungsId is not sufficient as the only lookup key.
GET /v2/ergebnisliste/ermittlung/{ermittlungsId}/ergebnisseGET /v3/vorgaenge/{vorgangsnummer}/ergebnisliste/{ergebnislisteId}The result list is represented by the v3 result-list resource.
GET /v2/ergebnisliste/ermittlung/{ermittlungsId}/ergebnisse/{ergebnisNummer}GET /v3/vorgaenge/{vorgangsnummer}/ergebnisliste/{ergebnislisteId}/{ergebnisnummer}v3 adds vorgangsnummer and ergebnislisteId to the URL.
GET /v2/ergebnisliste/ermittlung/{ermittlungsId}/ergebnisse/{ergebnisNummer}/meldungenGET /v3/vorgaenge/{vorgangsnummer}/ergebnisliste/{ergebnislisteId}/{ergebnisnummer}/meldungenv3 adds vorgangsnummer and ergebnislisteId to the URL.
GET /v2/ergebnisliste/ermittlung/{ermittlungsId}/ergebnisse/{ergebnisNummer}/unterlagenGET /v3/vorgaenge/{vorgangsnummer}/ergebnisliste/{ergebnislisteId}/{ergebnisnummer}/unterlagenv3 adds vorgangsnummer and ergebnislisteId to the URL.
GET /v2/ergebnisliste/ermittlung/{ermittlungsId}/ergebnisse/{ergebnisNummer}/provisionGET /v3/vorgaenge/{vorgangsnummer}/ergebnisliste/{ergebnislisteId}/{ergebnisnummer}/provisionv3 adds vorgangsnummer and ergebnislisteId to the URL.
GET /v2/ergebnisliste/ermittlung/{ermittlungsId}/ergebnisse/{ergebnisNummer}/zahlungsplaeneGET /v3/vorgaenge/{vorgangsnummer}/ergebnisliste/{ergebnislisteId}/{ergebnisnummer}/zahlungsplaenev3 adds vorgangsnummer and ergebnislisteId to the URL.
GET /v2/ergebnisliste/ermittlung/{ermittlungsId}/ergebnisse/{ergebnisNummer}/zahlungsplaene/{zahlungsplanIndex}GET /v3/vorgaenge/{vorgangsnummer}/ergebnisliste/{ergebnislisteId}/{ergebnisnummer}/zahlungsplaene/{zahlungsplanIndex}v3 adds vorgangsnummer and ergebnislisteId to the URL.
GET /v2/ergebnisliste/ermittlung/{ermittlungsId}/ermittlungsAnfrageNo equivalent Angebote API v3 endpoint. Use Kundenangaben API to read or manage the data of a Vorgang.This is a replacement pattern, not an Angebote API v3 endpoint.
GET /v2/ergebnisliste/ermittlung/{ermittlungsId}/ermittlungsAnfrage/erfassteDatenNo equivalent Angebote API v3 endpoint. Use Kundenangaben API .v3 does not expose the original ErfassteDaten through the Angebote API.

Vorgaenge API migration

Vorgaenge API v1 to v3

Most v1 endpoints have a direct v3 endpoint with the version segment changed from /v1/ to /v3/.

v1 endpointv3 endpointMigration notes
GET /v1/vorgaengeGET /v3/vorgaengeRegenerate the client from the v3 OpenAPI specification and validate response mapping.
GET /v1/vorgaenge/{vorgangsNummer}GET /v3/vorgaenge/{vorgangsNummer}Regenerate the client from the v3 OpenAPI specification and validate response mapping.
GET /v1/vorgaenge/{vorgangsNummer}/antraegeGET /v3/vorgaenge/{vorgangsNummer}/antraegeURL version segment changes only.
GET /v1/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}GET /v3/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}URL version segment changes only.
GET /v1/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}/{teilantragsNummer}GET /v3/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}/{teilantragsNummer}URL version segment changes only.
POST /v1/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}/{teilantragsNummer}/statusPOST /v3/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}/{teilantragsNummer}/statusURL version segment changes only.
GET /v1/vorgaenge/{vorgangsNummer}/kundenBetreuerGET /v3/vorgaenge/{vorgangsNummer}/kundenBetreuerURL version segment changes only.
PUT /v1/vorgaenge/{vorgangsNummer}/kundenBetreuerPUT /v3/vorgaenge/{vorgangsNummer}/kundenBetreuerURL version segment changes only.
GET /v1/vorgaenge/{vorgangsNummer}/vorgangsBearbeiterGET /v3/vorgaenge/{vorgangsNummer}/vorgangsBearbeiterURL version segment changes only.
PUT /v1/vorgaenge/{vorgangsNummer}/vorgangsBearbeiterPUT /v3/vorgaenge/{vorgangsNummer}/vorgangsBearbeiterURL version segment changes only.

Vorgaenge API v2 to v3

Most v2 endpoints also have a direct v3 endpoint with the version segment changed from /v2/ to /v3/. The exception is gemerkteAngebote: those endpoints are not part of the Vorgaenge API v3. Use the Angebote API v3 endpoints for saved offers.

v2 endpointv3 endpoint or replacementMigration notes
GET /v2/vorgaengeGET /v3/vorgaengeURL version segment changes only.
GET /v2/vorgaenge/{vorgangsNummer}GET /v3/vorgaenge/{vorgangsNummer}URL version segment changes only.
PATCH /v2/vorgaenge/{vorgangsNummer}PATCH /v3/vorgaenge/{vorgangsNummer}URL version segment changes only.
GET /v2/vorgaenge/{vorgangsNummer}/antraegeGET /v3/vorgaenge/{vorgangsNummer}/antraegeURL version segment changes only.
GET /v2/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}GET /v3/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}URL version segment changes only.
GET /v2/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}/{teilantragsNummer}GET /v3/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}/{teilantragsNummer}URL version segment changes only.
POST /v2/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}/{teilantragsNummer}/entscheidungsreifePOST /v3/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}/{teilantragsNummer}/entscheidungsreifeURL version segment changes only.
POST /v2/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}/{teilantragsNummer}/statusPOST /v3/vorgaenge/{vorgangsNummer}/antraege/{antragsNummer}/{teilantragsNummer}/statusURL version segment changes only.
GET /v2/vorgaenge/{vorgangsNummer}/finanzierungsvorschlaegeGET /v3/vorgaenge/{vorgangsNummer}/finanzierungsvorschlaegeURL version segment changes only.
GET /v2/vorgaenge/{vorgangsNummer}/finanzierungsvorschlaege/{finanzierungsvorschlagId}GET /v3/vorgaenge/{vorgangsNummer}/finanzierungsvorschlaege/{finanzierungsvorschlagId}URL version segment changes only.
GET /v2/vorgaenge/{vorgangsNummer}/kundenBetreuerGET /v3/vorgaenge/{vorgangsNummer}/kundenBetreuerURL version segment changes only.
PUT /v2/vorgaenge/{vorgangsNummer}/kundenBetreuerPUT /v3/vorgaenge/{vorgangsNummer}/kundenBetreuerURL version segment changes only.
POST /v2/vorgaenge/{vorgangsNummer}/nachrichtPOST /v3/vorgaenge/{vorgangsNummer}/nachrichtURL version segment changes only.
GET /v2/vorgaenge/{vorgangsNummer}/vorgangsBearbeiterGET /v3/vorgaenge/{vorgangsNummer}/vorgangsBearbeiterURL version segment changes only.
PUT /v2/vorgaenge/{vorgangsNummer}/vorgangsBearbeiterPUT /v3/vorgaenge/{vorgangsNummer}/vorgangsBearbeiterURL version segment changes only.
GET /v2/vorgaenge/{vorgangsNummer}/gemerkteAngeboteGET /v3/vorgaenge/{vorgangsnummer}/gemerkteangebote in Angebote API v3API and path casing change. gemerkteAngebote becomes gemerkteangebote.
GET /v2/vorgaenge/{vorgangsNummer}/gemerkteAngebote/{nummerAmVorgang}GET /v3/vorgaenge/{vorgangsnummer}/gemerkteangebote/{laufendeNummer} in Angebote API v3The path parameter is named laufendeNummer in Angebote API v3.
GET /v2/vorgaenge/{vorgangsNummer}/gemerkteAngebote/{nummerAmVorgang}/zahlungsPlaeneGET /v3/vorgaenge/{vorgangsnummer}/gemerkteangebote/{laufendeNummer}/zahlungsplaene in Angebote API v3API and path casing change.

Migration checklist

  1. Inventory all calls to Angebote API and Vorgaenge API that still use /v1/ or /v2/.
  2. Decide whether each Angebote API calculation uses an existing Vorgang. If not, migrate to Vorschlaege API or create/update a Vorgang before calculating.
  3. Regenerate API clients from the v3 OpenAPI specifications.
  4. Replace v2 Angebote API polling or redirect handling with v3 200/204 response handling.
  5. Persist the vorgangsnummer together with the v3 ergebnislisteId for all follow-up reads.
  6. Move gemerkteAngebote reads from Vorgaenge API v2 to Angebote API v3.