Automatizza OrbitPage senza condividere una sessione della dashboard.
Crea token con scope e gestisci la dashboard OrbitPage end-to-end da script, n8n, backend o CI.
Ultima revisione: 4 agosto 2026Gestisci il tuo workspace OrbitPage con token personali limitati: modifica e pubblica pagine e usa media, domini, analytics, AI, Shop, newsletter e fatturazione.
Tre confini di credenziali coprono tre utilizzi diversi.
Questa pagina documenta il confine REST versionato. Un token OrbitPage non è una chiave provider OpenAI e non autentica mai gli endpoint privati della dashboard.
| Ambito | Credenziale | Scopo e supporto |
|---|---|---|
| API REST di automazione | op_pat_... | API esterna supportata per script, n8n, backend server e CI. Gestisce il workspace vincolato al token tramite /api/v1. |
| OrbitPage AI | op_pat_... + ai:read/ai:write | Il flusso pubblico plan/commit prepara e applica proposte AI validate. Qualsiasi credenziale provider OpenAI resta separata e lato server e non è mai un bearer token OrbitPage. |
| API della dashboard | Sessione Firebase sul SaaS; sessione admin sull'OSS | Route private tra browser e app. Non sono un contratto stabile per integrazioni esterne e non devono ricevere token API personali. |
Le risorse versionate coprono la dashboard; gli endpoint link mostrano il ciclo di aggiornamento sicuro.
Ogni richiesta è vincolata al workspace selezionato quando il token è stato creato. Un token non può scegliere un altro tenant nell'URL o nel body e i permessi correnti del workspace vengono verificati a ogni chiamata.
Il contratto usa operazioni HTTPS JSON standard—GET, POST, PUT, PATCH e DELETE—ed è compatibile con curl, il nodo HTTP Request di n8n e i client generati da OpenAPI.
GET/api/v1/linksLeggi tutti i blocchi della pagina
Restituisce la collezione ordinata, l'identità del workspace e la revisione corrente.
Scope:links:readPATCH/api/v1/links/{linkId}Modifica un blocco esistente
Unisce i campi modificabili, valida l'intera pagina e pubblica la nuova revisione.
Scope:links:writePUT/api/v1/linksSostituisci l'intera collezione
Usalo per aggiungere, rimuovere o riordinare i blocchi dopo aver letto e conservato la collezione corrente.
Scope:links:write| Area dashboard | Percorsi API | Scope |
|---|---|---|
| Workspace e bozza completa | /workspace · /draft | workspace:read |
| Profilo, tema e sottopagine | /profile · /theme · /pages | profile:* · theme:* · pages:* |
| Impostazioni generali, privacy e menu | /settings/* | settings:* |
| Pubblicazione, versioni e backup | /publication · /versions · /backup | publication:* · backup:* |
| Media e domini personalizzati | /media/* · /domains/* | media:* · domains:* |
| Analytics e modifiche AI revisionate | /analytics · /ai/* | analytics:read · ai:* |
| Shop e newsletter | /shop/* · /newsletter/* | shop:* · newsletter:* |
| Team e fatturazione | /team/* · /billing/* | team:* · billing:* |
Ogni operazione supportata della dashboard, raggruppata per area controllata.
I percorsi seguenti sono relativi a https://orbitpage.com/api/v1. Metodo, percorso e scope costituiscono il contratto stabile di integrazione; schemi delle richieste, formati, valori enum e modelli di risposta sono nella specifica OpenAPI 3.1 collegata. Le route sconosciute restituiscono 404 e i metodi non supportati non vengono mai convertiti in modo implicito.
01Workspace, contenuti e aspettoControlla il workspace vincolato al token e gestisci bozza completa, profilo, blocchi, tema e sottopagine.11 operazioni
| Metodo e percorso | Operazione | Scope richiesto | Input e controlli |
|---|---|---|---|
GET/workspace | Leggi workspace, piano, accesso, utilizzo e revisione | workspace:read | — |
GET/draft | Leggi la bozza completa e modificabile della pagina | workspace:read | — |
GET/links | Elenca i blocchi della pagina e la revisione corrente | links:read | — |
PUT/links | Sostituisci l'intera collezione ordinata dei blocchi | links:write | LinksReplaceRequest · If-Match |
PATCH/links/{linkId} | Modifica i campi modificabili di un blocco | links:write | LinkPatch · If-Match |
GET/profile | Leggi identità e metadati del profilo | profile:read | — |
PATCH/profile | Aggiorna i campi del profilo | profile:write | JSON · If-Match · ?publish=1 |
GET/theme | Leggi il tema attivo della bozza | theme:read | — |
PUT/theme | Sostituisci il tema della bozza | theme:write | JSON · If-Match · ?publish=1 |
GET/pages | Elenca le sottopagine configurate | pages:read | — |
PUT/pages | Sostituisci le sottopagine configurate | pages:write | array | { pages } · If-Match · ?publish=1 |
02Impostazioni e pubblicazioneControlla menu, privacy, file pubblici gestiti, generazione della sitemap e il ciclo esplicito dalla bozza alla pubblicazione.9 operazioni
| Metodo e percorso | Operazione | Scope richiesto | Input e controlli |
|---|---|---|---|
GET/settings | Leggi impostazioni di menu, privacy, file di testo e sitemap | settings:read | — |
PUT/settings/menu | Aggiorna le impostazioni del menu | settings:write | JSON · If-Match · ?publish=1 |
PUT/settings/privacy | Aggiorna le impostazioni di consenso e privacy | settings:write | JSON · If-Match · ?publish=1 |
POST/settings/text-files | Crea un file di testo pubblico gestito | settings:write | TextFileCreateRequest · If-Match |
PUT/settings/text-files/{key} | Aggiorna un file di testo pubblico gestito | settings:write | TextFileUpdateRequest · If-Match |
DELETE/settings/text-files/{key} | Elimina un file di testo pubblico gestito | settings:write | If-Match |
POST/settings/sitemap | Rigenera la sitemap gestita | settings:write | If-Match |
GET/publication | Leggi lo stato di bozza e pubblicazione | publication:read | — |
POST/publication | Pubblica l'ultima bozza validata | publication:write | — |
03Versioni, backup e mediaRipristina contenuti versionati, esporta o importa i dati del workspace e usa il ciclo media prenota-carica-finalizza.9 operazioni
| Metodo e percorso | Operazione | Scope richiesto | Input e controlli |
|---|---|---|---|
GET/versions | Elenca le versioni pubblicate ripristinabili della pagina | backup:read | — |
POST/versions/{revision}/restore | Ripristina e pubblica subito una versione storica | backup:write | If-Match |
GET/backup | Esporta un backup gestito del workspace | backup:read | ?sections=profile,links,… |
POST/backup/restore | Valida, ripristina e pubblica subito un backup gestito | backup:write | BackupRestoreRequest · If-Match |
GET/media | Elenca metadati e utilizzo dei media del workspace | media:read | — |
POST/media/cleanup | Visualizza in anteprima o elimina i media non referenziati | media:write | MediaCleanupRequest |
POST/media/uploads/reserve | Prenota un caricamento diretto di media | media:write | MediaUploadReserveRequest |
POST/media/uploads/finalize | Finalizza e registra un oggetto caricato | media:write | UploadTokenRequest |
DELETE/media/uploads | Annulla un caricamento media prenotato | media:write | UploadTokenRequest |
04Domini, analytics e AIGestisci l'attivazione DNS, leggi report di performance limitati dal piano e applica modifiche AI solo dopo un'anteprima validata.8 operazioni
| Metodo e percorso | Operazione | Scope richiesto | Input e controlli |
|---|---|---|---|
GET/domains | Leggi stato del dominio e requisiti DNS | domains:read | — |
POST/domains | Collega un dominio personalizzato | domains:write | DomainConnectRequest |
POST/domains/refresh | Aggiorna verifica e attivazione | domains:write | — |
DELETE/domains | Scollega il dominio personalizzato | domains:write | — |
GET/analytics | Leggi il report analytics della dashboard | analytics:read | ?days=7|30|90 |
GET/ai/allowance | Leggi disponibilità AI e utilizzo corrente | ai:read | — |
POST/ai/plan | Genera un'anteprima validata delle modifiche AI | ai:write | AiPlanRequest |
POST/ai/commit | Applica un'anteprima AI validata in precedenza | ai:write | AiCommitRequest |
05ShopCollega il commercio, gestisci prodotti e aspetto, carica file protetti, quindi pubblica o ritira il blocco Shop sincronizzato.10 operazioni
| Metodo e percorso | Operazione | Scope richiesto | Input e controlli |
|---|---|---|---|
GET/shop | Leggi prodotti, ordini, clienti e stato di Shop; l'operazione può inizializzare dati privati di Shop e aggiornare lo stato Stripe | shop:read | ?refresh=0|1 |
POST/shop/connect | Crea o continua l'onboarding Stripe Connect | shop:write | — |
POST/shop/products | Crea o aggiorna un prodotto Shop | shop:write | ShopProductRequest |
DELETE/shop/products/{productId} | Elimina un prodotto Shop | shop:write | — |
PUT/shop/appearance | Sostituisci l'intero aspetto di Shop | shop:write | ShopAppearanceRequest |
POST/shop/publish | Pubblica Shop e il relativo blocco pagina sincronizzato | shop:write | — |
POST/shop/unpublish | Ritira Shop dalla pubblicazione | shop:write | — |
POST/shop/uploads/reserve | Prenota il caricamento di un file prodotto | shop:write | ShopFileUploadReserveRequest |
POST/shop/uploads/finalize | Finalizza il caricamento di un file prodotto | shop:write | ShopUploadTokenRequest |
DELETE/shop/uploads | Annulla un caricamento di file prodotto prenotato | shop:write | ShopUploadTokenRequest |
06NewsletterConfigura l'invio SMTP cifrato, gestisci gli iscritti con consenso e controlla l'intero ciclo delle campagne.9 operazioni
| Metodo e percorso | Operazione | Scope richiesto | Input e controlli |
|---|---|---|---|
GET/newsletter | Leggi iscritti, campagne e stato SMTP | newsletter:read | — |
PUT/newsletter/settings | Aggiorna le impostazioni SMTP cifrate | newsletter:write | NewsletterSmtpRequest |
POST/newsletter/settings/test | Invia un test di configurazione | newsletter:write | EmailRecipientRequest |
POST/newsletter/subscribers | Aggiungi o aggiorna un iscritto con consenso | newsletter:write | NewsletterSubscriberRequest |
DELETE/newsletter/subscribers/{subscriberId} | Rimuovi un iscritto | newsletter:write | — |
POST/newsletter/campaigns | Crea o aggiorna una campagna | newsletter:write | NewsletterCampaignRequest |
DELETE/newsletter/campaigns/{campaignId} | Elimina una campagna | newsletter:write | — |
POST/newsletter/campaigns/{campaignId}/send | Accoda o programma una campagna | newsletter:write | NewsletterSendRequest |
DELETE/newsletter/campaigns/{campaignId}/send | Annulla una campagna in coda | newsletter:write | — |
07Team e fatturazioneGestisci collaboratori e inviti, controlla gli abbonamenti e apri sessioni autenticate di checkout o portale Stripe.9 operazioni
| Metodo e percorso | Operazione | Scope richiesto | Input e controlli |
|---|---|---|---|
GET/team | Elenca membri e inviti in attesa | team:read | — |
POST/team/invitations | Crea un link di invito al workspace senza inviare email | team:write | TeamInvitationRequest |
PATCH/team/members/{memberUid} | Aggiorna il ruolo di un membro | team:write | TeamRoleRequest |
DELETE/team/members/{memberUid} | Rimuovi un membro del workspace | team:write | — |
DELETE/team/invitations/{invitationId} | Revoca un invito in attesa | team:write | — |
GET/billing | Leggi lo stato di piano e abbonamento | billing:read | — |
POST/billing/checkout | Crea un checkout Stripe per un piano | billing:write | BillingCheckoutRequest |
POST/billing/portal | Crea una sessione del portale di fatturazione Stripe | billing:write | BillingPortalRequest |
POST/billing/promotion-code | Riscatta un codice promozionale e riconcilia i diritti del piano | billing:write | PromotionCodeRedeemRequest |
Crea un token per una sola automazione e un solo ambiente.
Apri Dashboard > Account > Token API personali. Assegna un nome che identifichi proprietario e scopo, scegli accesso completo al workspace, workspace in sola lettura, solo link oppure singoli scope di risorsa, quindi imposta una scadenza di 30, 90 o 365 giorni—oppure nessuna scadenza se esiste già un processo di rotazione documentato.
Conferma la tua identità
La creazione del token è un'azione sensibile e richiede un'autenticazione Google o password recente.
Scegli lo scope minimo
Gli scope di lettura e scrittura sono separati per ogni risorsa—per esempio theme:read, theme:write, shop:read e shop:write. Uno scope di scrittura include automaticamente il relativo scope di lettura.
Copia il segreto una sola volta
OrbitPage conserva un hash SHA-256, non il segreto recuperabile. Se lo perdi, revocalo e crea un nuovo token.
Conservalo fuori dal codice
Usa una variabile d'ambiente o il secret store della CI. Non inserire mai il token in URL, repository, screenshot, bundle del browser o log di build.
export ORBITPAGE_TOKEN='op_pat_...'
curl --silent --show-error --include \
--header "Authorization: Bearer $ORBITPAGE_TOKEN" \
https://orbitpage.com/api/v1/links$env:ORBITPAGE_TOKEN = 'op_pat_...'
$headers = @{ Authorization = "Bearer $env:ORBITPAGE_TOKEN" }
Invoke-RestMethod -Uri 'https://orbitpage.com/api/v1/links' -Headers $headersLeggi la collezione e acquisisci la revisione prima di ogni modifica.
Il body della risposta contiene i blocchi ordinati in data e la revisione numerica corrente. La stessa revisione compare in X-OrbitPage-Revision e come ETag debole. Conserva uno dei due valori per If-Match; non indovinarlo e non riutilizzarlo tra esecuzioni non correlate.
HTTP/2 200
etag: W/"42"
x-orbitpage-revision: 42
content-type: application/json; charset=utf-8
{
"object": "list",
"data": [
{
"id": "portfolio-main",
"type": "link",
"title": "Selected work",
"description": "Recent projects and case studies",
"url": "https://example.com/work",
"isActive": true,
"status": "live",
"availability": "available",
"clickCount": 18,
"position": 0
}
],
"revision": 42,
"workspace": {
"tenantId": "tenant_...",
"pageId": "page_...",
"username": "your-page"
}
}dataLa collezione completa e ordinata dei blocchi. L'ordine dell'array è l'ordine visivo della pagina.revisionLa versione per la concorrenza ottimistica usata da ogni scrittura.workspaceIl tenant, la pagina e lo username vincolati in modo permanente al token.ETagIl valore più sicuro da passare direttamente nell'header If-Match successivo.Usa PATCH per la modifica più piccola a un blocco esistente.
Codifica nell'URL l'ID restituito da GET e invia solo i campi da cambiare. OrbitPage unisce la patch al blocco esistente, protegge identità e campi analytics, valida l'intera pagina rispetto a schema e piano, quindi pubblica immediatamente.
curl --request PATCH \
--url https://orbitpage.com/api/v1/links/portfolio-main \
--header "Authorization: Bearer $ORBITPAGE_TOKEN" \
--header 'Content-Type: application/json' \
--header 'If-Match: W/"42"' \
--data '{
"title": "Book a consultation",
"url": "https://example.com/book",
"isActive": true
}'| Gruppo di campi | Esempi | Comportamento |
|---|---|---|
| Contenuto | title, description, url, content, textItems | Modificabili se validi per il tipo di blocco esistente. |
| Visibilità e tempi | isActive, status, availability, startDate, endDate, timezone | Validati insieme alle regole di programmazione e del piano. |
| Aspetto e media | icon, coverImage, backgroundColor, alignment, size | Accettati solo quando i valori rispettano lo schema della pagina. |
| Protetti | id, type, clickCount, ctaClicks, systemKey | Ignorati o rifiutati. I blocchi gestiti dal sistema non possono essere modificati con PATCH. |
Usa PUT solo quando deve cambiare la collezione.
PUT sostituisce l'intera collezione ordinata. È l'operazione da usare per aggiungere un blocco, rimuoverlo o cambiare l'ordine della pagina. Non è una scorciatoia per modificare un solo titolo: omettere un blocco lo rimuove dalla pagina.
const token = process.env.ORBITPAGE_TOKEN;
if (!token) throw new Error("ORBITPAGE_TOKEN is missing");
const endpoint = "https://orbitpage.com/api/v1/links";
const authorization = { Authorization: `Bearer ${token}` };
const read = await fetch(endpoint, { headers: authorization });
if (!read.ok) throw new Error(`GET failed: ${read.status} ${await read.text()}`);
const current = await read.json();
const revision = read.headers.get("etag") ?? String(current.revision);
// Preserve the full collection and change only the intended block.
const links = current.data.map((block) =>
block.id === "portfolio-main"
? { ...block, title: "Work and case studies" }
: block
);
const write = await fetch(endpoint, {
method: "PUT",
headers: {
...authorization,
"Content-Type": "application/json",
"If-Match": revision
},
body: JSON.stringify({ links })
});
if (!write.ok) throw new Error(`PUT failed: ${write.status} ${await write.text()}`);
console.log(await write.json());Usa il nodo nativo n8n oppure lo stesso contratto da un client HTTP, un client generato, un backend o un runner CI.
OrbitPage non richiede un SDK: è compatibile qualsiasi client HTTPS in grado di inviare JSON, autenticazione Bearer e richieste standard GET, POST, PUT, PATCH e DELETE. I modelli seguenti coprono le parti con stato che un'integrazione deve gestire esplicitamente.
Nodo nativo n8n
Installa n8n-nodes-orbitpage e crea una credenziale OrbitPage API con token personale e URL base. Il test di connessione esegue una lettura sicura del workspace; le azioni guidate gestiscono poi percorsi, scope, collegamento degli elementi e scritture consapevoli della revisione senza inserire il segreto nel JSON del workflow.
Bozza e pubblicazione
Le scritture di profilo, tema, pagine e impostazioni supportate richiedono If-Match e aggiornano la bozza per impostazione predefinita. Aggiungi ?publish=1 per una pubblicazione immediata idonea, oppure controlla più modifiche differite e chiama POST /publication una sola volta. PATCH e PUT dei link pubblicano immediatamente.
Caricamento diretto dei media
Prima prenota, poi carica i byte nell'URL di storage restituito e infine finalizza. Invia il bearer token OrbitPage solo a orbitpage.com; per la richiesta allo storage usa esclusivamente metodo e header temporanei restituiti.
Applicazione AI revisionata
Plan restituisce un'anteprima validata senza modificare la pagina. Conserva e controlla il relativo previewToken, quindi applica esattamente quella proposta. Imposta publish nel body del commit solo se l'automazione è autorizzata a rendere pubblico il risultato.
Install community node: n8n-nodes-orbitpage
Credential: OrbitPage API
OrbitPage API Token: op_pat_...
OrbitPage Base URL: https://orbitpage.com
Connection test: GET /api/v1/workspace
First safe workflow step:
Node: OrbitPage
Resource: Workspace & Draft
Operation: Get Workspace Overview
First revision-controlled write:
Resource: Theme
Operation: Replace Entire Theme Draft
Revision Check: Use Latest Automatically (Recommended)# 1. Reserve an upload and receive uploadUrl, slot and uploadToken
POST /api/v1/media/uploads/reserve
{ "filename": "cover.jpg", "contentType": "image/jpeg", "sizeBytes": 245760 }
# 2. Upload the bytes directly using the returned URL, method and headers
# Do not forward the OrbitPage Authorization header to the storage URL.
# 3. Register the uploaded object in the workspace
POST /api/v1/media/uploads/finalize
{ "slot": "<slot>", "uploadToken": "<uploadToken>" }# 1. Generate a validated preview without changing the page
POST /api/v1/ai/plan
{ "message": "Make the primary CTA clearer" }
# 2. Review the returned operations and previewToken
# 3. Apply the exact reviewed preview; publishing remains explicit
POST /api/v1/ai/commit
{ "previewToken": "<previewToken>", "publish": false }Usa come URL base https://orbitpage.com, senza /api/v1. Un salvataggio riuscito legge /api/v1/workspace e conferma token, associazione al workspace e scope workspace:read senza modificare dati.
Un 401 richiede un token sostitutivo valido, un 403 richiede lo scope mancante e redirect ripetuti richiedono di controllare l'URL base o il reverse proxy. Condividi con il supporto stato e codice JSON, mai il segreto.
Tratta le credenziali di automazione come cicli brevi e osservabili.
Un workspace supporta fino a dieci token personali attivi per utente. L'elenco Account mostra prefisso, scope, date di creazione e scadenza e utilizzo recente. Il timestamp dell'ultimo uso viene aggiornato intenzionalmente al massimo una volta ogni cinque minuti.
name: Update OrbitPage
on: workflow_dispatch
jobs:
update:
runs-on: ubuntu-latest
env:
ORBITPAGE_TOKEN: ${{ secrets.ORBITPAGE_TOKEN }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: node scripts/update-orbitpage.mjs- Nomina i token per sistema e ambiente—per esempio “GitHub Actions · produzione”.
- Ruota creando il sostituto, aggiornando il secret store, provando una lettura e poi revocando il vecchio token.
- Revoca immediatamente dopo una possibile esposizione, un cambio di responsabilità o la dismissione del workflow. La revoca ha effetto dalla richiesta successiva.
- Non creare un unico token condiviso e permanente. Credenziali separate rendono comprensibili log, rotazione e risposta agli incidenti.
Gestisci lo stato HTTP e il codice leggibile dalla macchina.
Gli errori usano JSON con error e code. Non analizzare la frase destinata alle persone per controllare un workflow. La maggior parte delle risposte 4xx richiede di cambiare richiesta o credenziale; solo i conflitti di revisione e i limiti di frequenza appartengono a un percorso di retry automatico.
INVALID_JSON · LINKS_REQUIRED · LINK_PATCH_INVALIDCorreggi il body della richiesta o i campi rifiutati dallo schema della pagina.PERSONAL_TOKEN_*Sostituisci un token mancante, non valido, scaduto o revocato. Non riprovare con lo stesso segreto.PERSONAL_TOKEN_SCOPE_DENIED · SYSTEM_LINK_PROTECTEDUsa lo scope richiesto oppure interrompi: l'identità corrente non può eseguire questa operazione.LINK_NOT_FOUNDRileggi la collezione: l'ID del blocco potrebbe essere stato rimosso o sostituito.revision_conflictEsegui di nuovo GET, riapplica la modifica sul nuovo stato e riprova con la nuova revisione.REQUEST_TOO_LARGEMantieni il body JSON entro 768 KiB.UNSUPPORTED_CONTENT_ENCODINGInvia un body JSON non compresso.revision_requiredAggiungi If-Match usando la revisione o l'ETag restituito dall'ultima GET.RATE_LIMITEDAttendi Retry-After, poi riprova con backoff esponenziale e jitter.I limiti attuali consentono 120 richieste al minuto e 5.000 al giorno per token. Le protezioni antiabuso possono renderli più restrittivi; rispetta sempre Retry-After.
Un'integrazione sicura è limitata, segreta e consapevole della revisione.
Minimo privilegio
Usa la sola lettura se il job non deve pubblicare. Le capacità del token non possono superare il ruolo corrente del proprietario nel workspace.
Solo lato server
Chiama le API da script, backend o runner CI affidabili. Un bundle browser, client mobile o repository pubblico non può conservare un bearer secret.
Nessuna scrittura alla cieca
Esegui GET immediatamente prima di una scrittura e usa If-Match. Se un errore 409 restituisce revision_conflict, rileggi e riapplica l'intento; per ogni altro codice, risolvi la condizione di business documentata.
Valida il risultato
Controlla stato della risposta, revisione e dati restituiti. Per modifiche importanti, apri la pagina pubblica dopo la pubblicazione e segnala gli errori senza registrare il token nei log.
L'API REST di automazione con token personale è una funzionalità del SaaS gestito.
Il repository open source contiene un'API Express usata dalla dashboard inclusa, ma quell'API interna basata sulla sessione admin non è lo stesso contratto versionato per le automazioni. Non inviare un token op_pat a un server self-hosted e non inviare un JWT admin self-hosted a orbitpage.com/api/v1.
Usa questa guida, il contratto OpenAPI e i token personali creati in Account.
Usa la dashboard inclusa sulla stessa origine affidabile. La documentazione del repository spiega il confine interno per contributor e maintainer.