Skip to main content

Change Plan API

Full API docs for updating subscriptions.

Plan Change Preview

See charge amounts before changing plans.

Integration Guide

Step-by-step subscription setup.

Vad är en uppgradering eller nedgradering av en prenumeration?

Ändra kundens prenumerationsplan för att flytta dem mellan nivåer, justera kvantiteten för sätesbaserade produkter eller migrera till en ny produkt. API:t beräknar automatiskt proportionella belopp och debiteringar baserat på det valda debiteringsläget.
Plan changes can trigger an immediate charge depending on the proration mode you choose.

När ska planändringar användas?

  • Upgrade when a customer needs more features, usage, or seats
  • Downgrade when usage decreases
  • Migrate users to a new product or price without cancelling their subscription

Plan Change Flow

Prerequisites

Before implementing subscription plan changes, ensure you have:
  • A Dodo Payments merchant account with active subscription products
  • API credentials (API key and webhook secret key) from the dashboard
  • An existing active subscription to modify
  • Webhook endpoint configured to handle subscription events
Detaljerade konfigurationsinstruktioner finns i integrationsguiden.

Step-by-Step Implementation Guide

Follow this comprehensive guide to implement subscription plan changes in your application:
1

Understand Plan Change Requirements

Before implementing, determine:
  • Which subscription products can be changed to which others
  • What proration mode fits your business model
  • How to handle failed plan changes gracefully
  • Which webhook events to track for state management
Test plan changes thoroughly in test mode before implementing in production.
2

Choose Your Proration Strategy

Select the billing approach that aligns with your business needs:
Bäst för: SaaS-applikationer som vill kreditera oanvänd tid på den gamla planen.
  • Krediterar den oanvända delen av den aktuella cykeln, proportionellt efter återstående tid
  • Debiterar sedan en hel cykel för den nya planen – priset för den nya planen proportioneras aldrig
  • Nettodebitering = hel ny cykel − (återstående andel × hel gammal cykel)
3

Implement the Change Plan API

Use the Change Plan API to modify subscription details:
string
obligatorisk
The ID of the active subscription to modify.
string
obligatorisk
Det nya produkt-ID:t som prenumerationen ska ändras till.
integer
obligatorisk
Antal enheter för den nya planen (för sätesbaserade produkter).
string
obligatorisk
Hur omedelbar debitering ska hanteras: prorated_immediately, full_immediately, difference_immediately eller do_not_bill.
array
Valfria tillägg för den nya planen. Om du utelämnar detta fält, skickar null eller skickar en tom array tas alla befintliga tillägg bort, så inkludera befintliga tillägg för att behålla dem.
string
Styr beteendet när betalningen för planändringen misslyckas:
  • prevent_change: Behåll prenumerationen på den aktuella planen tills betalningen lyckas
  • apply_change (standard): Tillämpa planändringen omedelbart oavsett betalningsresultat
If not specified, uses the business-level default setting.
Samla in beloppet för planändringen via en betalningslänk i stället för att debitera prenumerationens sparade betalningsmetod. Kunden betalar på en hostad kassasida.Kräver företagets allow_plan_change_via_payment_link-funktion (Settings → Subscriptions → Collect Plan Change Payments by Payment Link), effective_at: immediately och on_payment_failure: prevent_change. Se Collecting Payment via a Checkout Link. Ignoreras av förhandsgranskningsrutten.
string
URL:en som tar emot kunden efter att betalningen via betalningslänken har genomförts. Omdirigeringen lägger till subscription_id, payment_id och status. Kräver collect_via_payment_link: true; annars misslyckas begäran med 422. Se Omdirigera kunden efter betalning.
Avbryt den obetalda betalningslänken för en väntande planändring, så att denna begäran ersätter den. En betald betalning eller en betalning som pågår returnerar 409. Se Ersätta en väntande betalningslänk. Ignoreras av preview-routen.
array
Valfria staplade rabattkoder som ska tillämpas på den nya planen (max 20, tillämpas i arrayordning). Beteendet beror på vad du skickar:
  • Inte angivet / null — befintliga rabatter med preserve_on_plan_change=true bevaras om de gäller för den nya produkten.
  • [] (tom array) — tar bort alla befintliga rabatter från prenumerationen.
  • ["CODE_A", "CODE_B", ...] — ersätter alla befintliga rabatter med denna staplade uppsättning.
string
föråldrad
Föråldrat — använd helst discount_codes för nya integrationer. Fältet fungerar fortfarande av bakåtkompatibilitetsskäl, men kan inte kombineras med discount_codes i samma begäran.
string
standard:"immediately"
När planändringen ska tillämpas:
  • immediately (standard): Tillämpa planändringen omedelbart
  • next_billing_date: Schemalägg ändringen till nästa faktureringsdatum. Kunden behåller sin aktuella plan tills faktureringsperioden är slut. Använd detta för nedgraderingar så att kunderna behåller fördelarna med sin aktuella plan fram till faktureringsperiodens slut.
4

Handle Webhook Events

Konfigurera webhook-hantering för att följa resultatet av planändringar:
  • subscription.active: Planändringen lyckades, prenumerationen uppdaterades
  • subscription.plan_changed: Prenumerationsplanen ändrades (uppgradering/nedgradering/uppdatering av tillägg)
  • subscription.on_hold: Debiteringen för planändringen misslyckades, förnyelser stoppades
  • payment.succeeded: Den omedelbara debiteringen för planändringen lyckades
  • payment.failed: Den omedelbara debiteringen misslyckades
Verifiera alltid webhook-signaturer och implementera idempotent händelsehantering.
5

Update Your Application State

Uppdatera din applikation baserat på webhook-händelser:
  • Ge eller återkalla funktioner baserat på den nya planen
  • Uppdatera kundpanelen med information om den nya planen
  • Skicka bekräftelsemejl om planändringar
  • Logga faktureringsändringar för granskningsändamål
6

Test and Monitor

Testa implementationen noggrant:
  • Testa alla prorateringslägen med olika scenarier
  • Kontrollera att webhook-hanteringen fungerar korrekt
  • Övervaka hur ofta planändringar lyckas
  • Konfigurera aviseringar för misslyckade planändringar
Din implementation av planändringar för prenumerationer är nu klar för produktionsanvändning.

Förhandsvisa planändringar

Innan du genomför en planändring kan du använda Preview API för att visa kunderna exakt vad de kommer att debiteras:
Använd preview API för att skapa bekräftelsedialoger som visar kunderna det exakta belopp de kommer att debiteras innan de bekräftar en planändring.
I immediate_charge.summary är customer_credits nett förändringen av kundens kreditsaldo, i den valuta som anges av customer_credits_currency. Detta är valutan för kundens kreditplånbok, vilket är prenumerationens valuta. Den kan skilja sig från sammanfattningens currency, som gäller för total_amount och tax. En kund som till exempel betalar i INR för en prenumeration i USD ser krediter i USD.

Change Plan API

Använd Change Plan API för att ändra produkt, kvantitet och prorateringsbeteende för en aktiv prenumeration.

Snabbstartsexempel

En lyckad planändring returnerar 200 OK omedelbart — innan någon debitering faktiskt har genomförts. Vad body (ChangePlanResponse) innehåller beror på hur ändringen samlades in:
Detta svar bekräftar att begäran accepterades, inte att en debitering lyckades. För en vanlig omedelbar debitering fastställs resultatet off-session direkt efter anropet. För en begäran med collect_via_payment_link behåller prenumerationen sin aktuella plan tills kunden slutför betalningen.Bekräfta resultatet via webhook (payment.succeeded, payment.failed, subscription.plan_changed) eller genom att läsa prenumerationen igen med GET /subscriptions/{subscription_id} — se Vad händer medan länken är obetald för fallet med betalningslänk.
Om den omedelbara debiteringen misslyckas kan prenumerationen övergå till subscription.on_hold tills betalningen lyckas.

Samla in betalning via en kassalänk

Som standard debiterar en omedelbar planändring prenumerationens sparade betalningsmetod direkt. Ange collect_via_payment_link: true för att i stället skicka kunden till en hostad kassasida — användbart när ingen betalningsmetod har sparats eller när du vill att kunden aktivt ska bekräfta det nya priset.
Detta aktiverar växeln Collect Plan Change Payments by Payment Link i Settings → Subscriptions, som dirigerar Customer Portal:s flöde för planändringar genom checkout.

Krav

collect_via_payment_link: true lyckas endast när alla följande villkor är uppfyllda — annars misslyckas begäran med 422:
  • Företaget har funktionen allow_plan_change_via_payment_link aktiverad (Settings → Subscriptions → Collect Plan Change Payments by Payment Link).
  • effective_at är immediately (standard). En schemalagd ändring (next_billing_date) behöver aldrig en kassasida.
  • Begäran anger on_payment_failure: prevent_change. Ett uttryckligt apply_change misslyckas med 422.
collect_via_payment_link gäller för alla omedelbara ändringar som leder till en debitering, inklusive nedgraderingar, så länge kraven ovan är uppfyllda.
Om ändringen blir noll eller en kredit utfärdas ingen betalningslänk: payment_link och de andra checkout-fälten returneras som null, och ändringen tillämpas omedelbart. Detta är inte ett 422. Anropa Preview Plan Change först för att kontrollera beloppet innan du begär en länk.
En lyckad begäran returnerar checkout-referenserna:

Vad händer medan länken är obetald

  • Prenumerationen stannar på sin aktuella plan — product_id, recurring_pre_tax_amount och next_billing_date förblir oförändrade tills länken har betalats.
  • En ytterligare begäran med change-plan avvisas med 409 PendingPlanChangeExists medan länken väntar. Skicka den nya begäran med cancel_older_payment_link: true för att ersätta den väntande ändringen. Se Ersätta en väntande betalningslänk.
  • Försök igen efter en nekad betalning genom att anropa change-plan igen för att få en ny länk.
  • Om länken aldrig betalas slutar den att fungera efter expires_on — prenumerationen blir automatiskt tillgänglig för en ny begäran om planändring kort därefter.
  • Om en schemalagd ändring redan fanns och du ersätter den med cancel_scheduled_change_plan: true ligger det ursprungliga schemat kvar medan länken är obetald och avbryts först när länken har betalats — i samma transaktion som tillämpar den nya planen.
När en omedelbar ändring via betalningslänk har utfärdats blockeras alla ytterligare begäranden om planändring för prenumerationen — inklusive den sidoeffektfria förhandsvisningen — tills länken har lösts. En begäran med change-plan kan ersätta länken genom att ange cancel_older_payment_link: true. Förhandsvisningen ignorerar detta fält, så en förhandsvisning förblir blockerad.

Omdirigera kunden efter betalning

Ange return_url för att skicka kunden tillbaka till din webbplats efter att länken har betalats:
Efter checkout går kunden till return_url med följande query-parametrar: När betalningen misslyckas förblir prenumerationen aktiv på sin aktuella plan. Den nya planen kan börja gälla kort efter omdirigeringen, när betalningswebhooken anländer, så läs prenumerationen igen innan du visar den nya planen. return_url kräver collect_via_payment_link: true. Utan detta misslyckas begäran med 422.

Ersätta en väntande betalningslänk

Om kunden lämnar checkout utan att betala anger du cancel_older_payment_link: true i nästa begäran med change-plan. Dodo Payments avbryter den obetalda länken och den nya planändringen ersätter den väntande. Den avbrutna länken accepterar inte längre någon betalning, inte ens på en checkout-sida som redan är öppen.
Begäran valideras innan länken avbryts, så en ogiltig begäran lämnar kundens länk intakt. Länken avbryts endast om kunden inte har börjat betala: Varje begäran med change-plan utfärdar en egen faktura. Den ersatta planändringen och dess faktura avbryts. Om ingen planändring väntar har cancel_older_payment_link ingen effekt.
En kontroll som körs efter valideringen, till exempel minimibeloppet för debitering, kan fortfarande misslyckas efter att länken har avbrutits. Prenumerationen stannar då på sin aktuella plan utan någon öppen länk. Skicka begäran igen för att utfärda en ny länk.

Hantera tillägg

När du ändrar prenumerationsplaner kan du även ändra tillägg:
Tillägg inkluderas i prorateringsberäkningen och debiteras enligt det valda prorateringsläget.

Tillämpa rabattkoder

Tillämpa en eller flera staplade rabattkoder när du ändrar prenumerationsplaner (max 20, tillämpas i arrayordning):

Rabattbeteende vid planändring

Det singulära fältet discount_code på denna endpoint är föråldrat, men fungerar fortfarande av bakåtkompatibilitetsskäl — befintliga integrationer behöver inte ändras omedelbart. Det kan inte kombineras med discount_codes i samma begäran. Migrera till arrayformen när det passar.
Använd Preview Plan Change API med discount_codes för att visa kunderna exakt hur mycket de sparar innan de bekräftar planändringen.

Prorateringslägen

Välj hur kunden ska debiteras när planer ändras:

prorated_immediately

  • Krediterar den outnyttjade delen av den aktuella cykeln — basplan, kvantitet och tillägg — proraterat efter återstående tid
  • Debiterar sedan en hel cykel för den nya planen, kvantiteten och tilläggen. Själva debiteringen prorateras aldrig
  • Omedelbar nettodebitering = (hel ny cykel) − (återstående andel × hel gammal cykel)
  • Om krediten överstiger debiteringen för den nya cykeln (vanligt vid nedgraderingar) hålls mellanskillnaden som prenumerationsspecifik kredit för framtida förnyelser
  • Under en provperiod debiteras kunden omedelbart och byter till den nya planen nu

full_immediately

  • Debiterar hela beloppet för den nya planen omedelbart
  • Ignorerar återstående tid på den gamla planen — ingen kredit för den aktuella cykeln
Krediter som skapas av prorated_immediately och av nedgraderingar med difference_immediately är prenumerationsspecifika och skiljer sig från förmåner i Credit-Based Billing. De tillämpas automatiskt på framtida förnyelser av samma prenumeration och kan inte överföras mellan prenumerationer.

difference_immediately

  • Uppgradering: debiterar omedelbart prisskillnaden mellan de gamla och nya planerna
  • Nedgradering: lägger till återstående värde som intern kredit på prenumerationen och tillämpar den automatiskt vid förnyelser

do_not_bill

  • Inga debiteringar eller krediter beräknas
  • Kunden byter omedelbart till den nya planen utan någon faktureringsjustering
  • Faktureringscykeln förblir oförändrad
  • Passar bäst för kostnadsfria migreringar, byte till kostnadsfria planer eller när kostnadsskillnader absorberas

Exempelscenarier

Använd dessa standardiserade siffror konsekvent:
  • Aktuell plan: Basic på $30/månad
  • Målplan för uppgradering: Pro på $80/månad
  • Målplan för nedgradering (från Pro): Starter på $20/månad
  • Faktureringscykel: 30 dagar, startade 1 januari
  • Planändringen sker 16 januari (15 dagar återstår, 15 dagar har förflutit)

Så behandlar varje läge faktureringen

Välj prorated_immediately för att kreditera outnyttjad tid på den gamla planen och samtidigt debitera en hel cykel av den nya; välj full_immediately för att starta om faktureringen; använd difference_immediately för enkla uppgraderingar och automatisk kreditering vid nedgraderingar; eller använd do_not_bill för att byta plan utan någon faktureringsjustering.

Hantera betalningsfel

Styr vad som händer när en betalning för en planändring misslyckas med parametern on_payment_failure.

Lägen för betalningsfel

Om inget anges använder parametern on_payment_failure den standardinställning på företagsnivå som konfigurerats i dashboarden.

När varje läge ska användas

Företags- och insamlingsstandarder

Ange standardbeteende för uppgraderingar och nedgraderingar på företagsnivå under Settings → Subscriptions. Dessa standardvärden gäller för alla planändringar i kundportalen och kan åsidosättas per produktsamling. Separata standardvärden finns för uppgraderingar och nedgraderingar: Konfigurera företagsstandarder under Settings → Subscriptions och åsidosättningar för samlingar i varje produktsamling. Varje samlingsfält är oberoende — lämna det tomt för att ärva företagets standardvärde eller ange ett värde för att åsidosätta det.

Prioritetsordning

För en viss planändring löses varje inställning i följande ordning:
Ett värde som uttryckligen skickas till Change Plan API gäller alltid. Företags- och samlingsstandarder används endast när inget uttryckligt värde anges — vilket gäller för alla planändringar som initieras från kundportalen.
En vanlig konfiguration är att behålla uppgraderingar på immediately + difference_immediately så att kunderna betalar skillnaden och får åtkomst direkt, och att behålla nedgraderingar på next_billing_date så att kunderna behåller sin aktuella plan tills cykeln är slut.

Hantera webhooks

Följ prenumerationens tillstånd via webhooks för att bekräfta planändringar och betalningar.

Händelsetyper att hantera

  • subscription.active: prenumerationen aktiverad
  • subscription.plan_changed: prenumerationsplanen ändrad (uppgradering/nedgradering/ändringar av tillägg)
  • subscription.on_hold: debiteringen misslyckades, förnyelser stoppade
  • subscription.renewed: förnyelsen lyckades
  • payment.succeeded: betalningen för planändringen eller förnyelsen lyckades
  • payment.failed: betalningen misslyckades
Basera affärslogiken på prenumerationshändelser och använd betalningshändelser för bekräftelse och avstämning.

Verifiera signaturer och hantera avsikter

Bästa praxis

Strategi för planändringar

  • Testa noggrant: Testa alltid planändringar i testläge före produktion
  • Välj proratering med omsorg: Välj det prorateringsläge som passar din affärsmodell
  • Hantera fel på ett robust sätt: Implementera korrekt felhantering och logik för nya försök
  • Övervaka lyckade ändringar: Följ hur ofta planändringar lyckas eller misslyckas och undersök problem

Webhook-implementation

  • Verifiera signaturer: Validera alltid webhook-signaturer för att säkerställa äkthet
  • Implementera idempotens: Hantera duplicerade webhook-händelser på ett robust sätt
  • Bearbeta asynkront: Blockera inte webhook-svar med tunga operationer
  • Logga allt: För detaljerade loggar för felsökning och granskningsändamål

Användarupplevelse

  • Kommunicera tydligt: Informera kunderna om faktureringsändringar och tidpunkter
  • Ge bekräftelser: Skicka bekräftelsemejl för lyckade planändringar
  • Hantera specialfall: Ta hänsyn till provperioder, proratering och misslyckade betalningar
  • Uppdatera gränssnittet omedelbart: Återspegla planändringar i applikationens gränssnitt

Vanliga problem och lösningar

Lös typiska problem som uppstår vid ändringar av prenumerationsplaner:
Symptom: API-anropet lyckas men prenumerationen ligger kvar på den gamla planenVanliga orsaker:
  • Webhook-bearbetningen misslyckades eller fördröjdes
  • Applikationens tillstånd uppdaterades inte efter mottagna webhooks
  • Problem med databastransaktioner under tillståndsuppdateringen
Lösningar:
  • Implementera webhook-hantering med logik för nya försök
  • Använd idempotenta operationer för tillståndsuppdateringar
  • Lägg till övervakning för att upptäcka och avisera om missade webhook-händelser
  • Kontrollera att webhook-endpointen är åtkomlig och svarar korrekt
Symptom: Kunden nedgraderar men ser inget kreditsaldoVanliga orsaker:
  • Förväntningar på prorateringsläget: nedgraderingar krediterar hela prisskillnaden mellan planerna med difference_immediately, medan prorated_immediately krediterar den outnyttjade tiden i den gamla cykeln och sedan debiterar en hel cykel för den nya planen — ett kreditsaldo blir därför bara kvar när krediten överstiger priset för den nya planen
  • Krediter är prenumerationsspecifika och överförs inte mellan prenumerationer
  • Kreditsaldot visas inte i kundpanelen
Lösningar:
  • Använd difference_immediately för nedgraderingar när du vill ha automatiska krediter
  • Förklara för kunderna att krediter tillämpas på framtida förnyelser av samma prenumeration
  • Implementera kundportalen så att kreditsaldon visas
  • Kontrollera nästa fakturaförhandsvisning för att se tillämpade krediter
Symptom: Webhook-händelser avvisas på grund av ogiltig signaturVanliga orsaker:
  • Felaktig webhook-hemlighet
  • Rå request body ändrades före signaturverifieringen
  • Fel algoritm för signaturverifiering
Lösningar:
  • Kontrollera att du använder korrekt DODO_PAYMENTS_WEBHOOK_KEY från dashboarden
  • Läs den råa request body innan någon JSON-parsning sker
  • Använd standardbiblioteket för webhook-verifiering för din plattform
  • Testa webhook-signaturverifieringen i utvecklingsmiljön
Symptom: API returnerar felet 422 Unprocessable EntityVanliga orsaker:
  • Ogiltigt prenumerations-ID eller produkt-ID
  • Prenumerationen är inte i aktivt tillstånd
  • Obligatoriska parametrar saknas
  • Produkten är inte tillgänglig för planändringar
Lösningar:
  • Kontrollera att prenumerationen finns och är aktiv
  • Kontrollera att produkt-ID:t är giltigt och tillgängligt
  • Säkerställ att alla obligatoriska parametrar anges
  • Läs API-dokumentationen för parameterkrav
Symptom: Planändringen initierades men den omedelbara debiteringen misslyckasVanliga orsaker:
  • Otillräckliga medel på kundens betalningsmetod
  • Betalningsmetoden har löpt ut eller är ogiltig
  • Banken nekade transaktionen
  • Bedrägeridetektering blockerade debiteringen
Lösningar:
  • Hantera webhook-händelser med payment.failed på lämpligt sätt
  • Meddela kunden att betalningsmetoden behöver uppdateras
  • Implementera logik för nya försök vid tillfälliga fel
  • Överväg att tillåta planändringar när omedelbara debiteringar misslyckas
Symptom: Debiteringen för planändringen misslyckas och prenumerationen övergår till tillståndet on_holdVad händer: När en debitering för en planändring misslyckas placeras prenumerationen automatiskt i tillståndet on_hold. Prenumerationen förnyas inte automatiskt förrän betalningsmetoden har uppdaterats.Lösning: Uppdatera betalningsmetoden för att återaktivera prenumerationenSå här återaktiverar du en prenumeration från tillståndet on_hold efter en misslyckad planändring:
  1. Uppdatera betalningsmetoden med Update Payment Method API
  2. Automatisk skapelse av debitering: API:t skapar automatiskt en debitering för återstående skulder
  3. Fakturagenerering: En faktura genereras för debiteringen
  4. Betalningshantering: Betalningen behandlas med den nya betalningsmetoden
  5. Återaktivering: När betalningen lyckas återaktiveras prenumerationen till tillståndet active
Webhook-händelser att övervaka:
  • subscription.on_hold: Prenumerationen sattes på paus (mottas när debiteringen för planändringen misslyckas)
  • payment.succeeded: Betalningen för återstående skulder lyckades (efter uppdatering av betalningsmetoden)
  • subscription.active: Prenumerationen återaktiverades efter lyckad betalning
Bästa praxis:
  • Meddela kunderna omedelbart när en debitering för en planändring misslyckas
  • Ge tydliga instruktioner om hur betalningsmetoden uppdateras
  • Övervaka webhook-händelser för att följa återaktiveringsstatus
  • Överväg att implementera automatisk logik för nya försök vid tillfälliga betalningsfel

Update Payment Method API Reference

Visa den fullständiga API-dokumentationen för uppdatering av betalningsmetoder och återaktivering av prenumerationer.

Testa din implementation

Testa din implementation av planändringar för prenumerationer noggrant:
1

Set up test environment

  • Använd test-API-nycklar och testprodukter
  • Skapa testprenumerationer med olika plantyper
  • Konfigurera en test-endpoint för webhooks
  • Konfigurera övervakning och loggning
2

Test different proration modes

  • Testa prorated_immediately med olika positioner i faktureringscykeln
  • Testa difference_immediately för uppgraderingar och nedgraderingar
  • Testa full_immediately för att återställa faktureringscykler
  • Testa do_not_bill för planbyten utan debitering eller kredit
  • Kontrollera att krediterna beräknas korrekt
3

Test webhook handling

  • Kontrollera att alla relevanta webhook-händelser tas emot
  • Testa webhook-signaturverifieringen
  • Hantera duplicerade webhook-händelser på ett robust sätt
  • Testa scenarier där webhook-bearbetningen misslyckas
4

Test error scenarios

  • Testa med ogiltiga prenumerations-ID:n
  • Testa med utgångna betalningsmetoder
  • Testa nätverksfel och tidsgränser
  • Testa med otillräckliga medel
5

Monitor in production

  • Konfigurera aviseringar för misslyckade planändringar
  • Övervaka webhook-bearbetningstider
  • Följ hur ofta planändringar lyckas
  • Granska kundsupportärenden om problem med planändringar

Felhantering

Hantera vanliga API-fel på ett robust sätt i din implementation:

HTTP-statuskoder

Begäran om planändring behandlades korrekt. Svarskroppen är en ChangePlanResponse med payment_id, payment_link, client_secret och expires_on. Alla fyra kan vara null, så kroppen serialiseras som {} för en vanlig off-session-ändring; de är ifyllda för en lyckad begäran med collect_via_payment_link, som returnerar checkout-referenser — se Samla in betalning via en kassalänk. Om on_payment_failure=prevent_change förblir planändringen väntande tills betalningen lyckas.
Ogiltiga parametrar i begäran. Kontrollera att alla obligatoriska fält har angetts och formaterats korrekt.
Ogiltig eller saknad API-nyckel. Kontrollera att din DODO_PAYMENTS_API_KEY är korrekt och har rätt behörigheter.
En väntande planändring finns redan för denna prenumeration (PendingPlanChangeExists). För en schemalagd ändring avbryter du den med DELETE /subscriptions/{subscription_id}/change-plan/scheduled innan du skickar en ny. För en väntande ändring via betalningslänk skickar du den nya begäran med cancel_older_payment_link: true för att ersätta den. Se Ersätta en väntande betalningslänk.Med cancel_older_payment_link: true betyder 409 att kunden betalar den föregående länken just nu (PLAN_CHANGE_PAYMENT_IN_PROGRESS) eller redan har betalat den (PLAN_CHANGE_PAYMENT_ALREADY_COMPLETED).
Med cancel_older_payment_link: true kunde den föregående betalningslänken inte avbrytas (PLAN_CHANGE_LINK_CANCEL_FAILED). Inget ändrades, så du kan försöka igen.
Prenumerationen är inaktiv eller on-demand, eller så är begäran inte berättigad till collect_via_payment_link — företaget har inte funktionen aktiverad, effective_at är inte immediately eller on_payment_failure är inte prevent_change. Se Krav. Ett prenumerations-ID som inte finns eller inte tillhör ditt konto returnerar 404 med koden NOT_FOUND.
Ett serverfel inträffade. Försök igen efter en kort fördröjning.

Format för felsvar

Fel returnerar en JSON-kropp med en code och en läsbar message:
Se Felkoder för hela listan.

Nästa steg

Senast ändrad 8 oktober 2026