Ordine di creazione
Che cosa deve esistere prima di ogni chiamata, da dove arriva ogni id, la sequenza dei flussi più comuni e gli errori che compaiono quando si salta un passaggio.
Quasi tutto su Memberfy dipende da qualcosa creato prima: la lezione ha bisogno del modulo, il modulo del corso, il corso dello spazio. Chiamare l'API fuori ordine non rompe nulla, ma ogni chiamata anticipata viene rifiutata. Questa guida mostra l'ordine giusto e l'id che passa da una chiamata alla successiva.
La mappa delle dipendenze
Letto in un altro modo:
| Per creare… | Serve prima… | E si passa |
|---|---|---|
| Spazio | una sezione | sectionId |
| Post, evento, corso, immagine | uno spazio | spaceId |
| Modulo del corso | un corso | courseId |
| Lezione | un modulo | moduleId |
| Piano | le opzioni di fatturazione (prodotti SUBSCRIPTION) | productIds |
| Componente aggiuntivo del piano | il piano, e un prodotto mensile che non sia un'opzione di un piano | addOnProductIds |
| Accesso a uno spazio per piano o prodotto | il piano o il prodotto | access.subscriptionGroupIds, access.productIds |
| Coupon valido solo per alcuni prodotti | i prodotti | applicableProducts |
| Qualsiasi vendita o prelievo | Informazioni Aziendali e conto di accredito approvati | — |
In tutte le chiamate qui sotto si inviano Authorization e X-CommunityId. Vedi Autenticazione e X-CommunityId.
Corso
- Sezione (se non c'è ancora):
POST /api/sectionscontitleevisibility. Conservadata.idcomesectionId. - Spazio Corsi:
POST /api/spacesconsectionId,titleemodule: "courses". Conserva lospaceId. - Corso:
POST /api/coursesconcommunityId(lo stesso dell'header),spaceId,title,slugelevel(beginner,intermediate,advanced). Nasce come bozza. Conserva ilcourseId. - Moduli:
POST /api/courses/moduleconcourseIdetitle, uno per modulo. Conserva ognimoduleId. - Lezioni:
POST /api/courses/lessonconmoduleId,titleetype(text,image,video,link). - Pubblicare:
PUT /api/courses/{id}constatus: "published". Solo un corso pubblicato accetta iscrizioni.
Per sistemare in seguito: PUT e DELETE /api/courses/module/{moduleId} rinominano, riordinano ed eliminano un modulo (con le sue lezioni); PUT e DELETE /api/courses/lesson/{lessonId} cambiano titolo, tipo, durata e ordine di una lezione, la spostano in un altro modulo dello stesso corso (moduleId) e la eliminano. L'eliminazione conserva i progressi di chi l'aveva già seguita.
Per vendere il corso, prosegui con un prodotto che apre lo spazio (vedi Evento, passaggi 3 e 4, che valgono allo stesso modo).
Mentoring
Una classe con una bacheca propria, incontri e addebito mensile. (Con la durata del contratto, l'opzione del passaggio 3 riceve commitmentMonths.)
- Spazio privato della classe:
POST /api/spacesconmodule: "feed"evisibility: "private". Conserva lospaceId. - Incontri:
POST /api/events, uno per incontro, conspaceId,title,slug,type: "online",startTimeedendTime. - Opzione di fatturazione:
POST /api/productscontype: "SUBSCRIPTION",title,price,billingInterval: "MONTHLY"eallowedPaymentMethods. Conserva l'iddel prodotto. - Piano:
POST /api/subscription-groupsconnameeproductIds: [<id del passaggio 3>]. Conserva l'iddel piano. - Aprire lo spazio al piano:
PUT /api/spaces/{id}conaccess: { "subscriptionGroupIds": [<id del piano>] }.
Il passaggio 5 funziona solo dopo il 4: il piano deve esistere per poter essere indicato nell'accesso.
Evento
Un evento in presenza con biglietto a pagamento e avviso nel Feed.
- Spazio Eventi:
POST /api/spacesconmodule: "events". - Evento:
POST /api/eventsconspaceId,title,slug,type: "in_person",startTime,endTimee l'indirizzo (street,number,city…). - Biglietto:
POST /api/productscontype: "ONE_TIME",price,hasStock: trueestockQuantity. Poi pubblicalo. - Aprire lo spazio a chi ha acquistato:
PUT /api/spaces/{id}convisibility: "private"eaccess: { "productIds": [<id del biglietto>] }. - Avviso fissato:
POST /api/contentnello spazio Feed, ePUT /api/feed/{type}/{id}/pincon l'id del post.
Piano con componenti aggiuntivi
- Opzioni di fatturazione del piano: un
POST .../productsper opzione (Mensile, Annuale),type: "SUBSCRIPTION". - Il componente aggiuntivo: un altro
POST .../products,type: "SUBSCRIPTION",billingInterval: "MONTHLY". Non entra neiproductIdsdi nessun piano. - Piano:
POST .../subscription-groupscon iproductIdsdel passaggio 1. - Componenti aggiuntivi nel piano:
PUT .../subscription-groups/{id}conaddOnProductIds: [<id del passaggio 2>].
Prima di vendere: il conto di accredito
Un ordine che vale per qualsiasi vendita:
POST .../business-informatione.../submit.POST .../payout-settingse.../submit.- Attendere le due approvazioni (fino a 7 giorni lavorativi).
GET .../payout-settings/prerequisitesindica che cosa manca.
Prodotti, opzioni, piani, componenti aggiuntivi, coupon e offerte di downsell si possono creare e modificare prima dell'approvazione: il prodotto nasce DRAFT, nella valuta del paese delle Informazioni Aziendali (in qualsiasi stato) oppure in BRL se non ci sono. La pubblicazione (POST .../products/{id}/publish, oppure PUT .../products/{id} con status: ACTIVE), il checkout e il prelievo aspettano l'approvazione. Delle Informazioni Aziendali approvate che vengono modificate tornano a PENDING e richiedono di nuovo .../submit; fino alla nuova approvazione, il checkout rifiuta.
Gli errori di chi salta un passaggio
| Chiamata | Che cosa mancava | Risposta |
|---|---|---|
POST /api/spaces | la sezione | 400 · Seção não encontrada ou não pertence a esta comunidade. |
POST /api/spaces (o PUT) | la sezione è più chiusa | 400 · This space cannot be more open than the section "…", which is … |
PUT /api/spaces/{id} con access | il piano, prodotto o gruppo indicato | 400 · The access grant "…" does not exist in this community. (param: access) |
POST /api/courses | lo spazio | 400 · ID do espaço é obrigatório. oppure Espaço não encontrado ou não pertence a esta comunidade. |
POST /api/courses/module | il corso | 404 · Course not found |
POST /api/courses/lesson | il modulo | 404 · Module not found |
POST .../subscription-groups | le opzioni di fatturazione | 400 · Prodotto non trovato |
PUT .../subscription-groups/{id} con addOnProductIds | il prodotto del componente aggiuntivo, oppure è già un'opzione di un piano | 400 · Uno dei componenti aggiuntivi non esiste in questa community o è stato eliminato. / Un prodotto che è un'opzione di pagamento di un piano non può essere un componente aggiuntivo di un altro. |
| Configurazione del checkout | il conto di accredito approvato | 400 · Configuração de pagamento não foi realizada para esta comunidade |
POST .../products/{id}/publish (o PUT con status: ACTIVE) | le Informazioni Aziendali approvate | 403 · Per pubblicare e iniziare a vendere, la community deve avere le informazioni aziendali approvate… |
POST .../products/{id}/publish | il prodotto nella valuta del paese approvato | 400 · Questo prodotto è in …, ma la valuta delle informazioni aziendali approvate è … (param: currency) |
POST /api/checkout | le Informazioni Aziendali approvate | 403 · La community deve avere informazioni aziendali approvate per abilitare prodotti a pagamento |
POST .../payouts | saldo sufficiente per l'importo e la commissione | 400 · Saldo insufficiente. Disponibile: … |
| Qualsiasi | l'header | 400 · X-CommunityId é obrigatório |
Alcuni messaggi arrivano ancora in inglese o in portoghese, qualunque sia l'Accept-Language (come Valid course ID is required quando l'id non è un UUID). Basati sullo status code e su param, non sul testo.
Consigli
- Conserva ogni id che torna in
data.id: è quello che chiede la chiamata successiva. - Invia lo stesso
communityIdnel corpo (quando la rotta lo chiede) e nell'header. - Ripetere non annulla: se una sequenza si interrompe a metà, riprendi dal passaggio fallito invece di ricominciare (ricominciare crea duplicati).
- Nell'MCP, gli strumenti composti seguiranno questo ordine da soli.