API REST di automazione

API REST di automazione

Crea token con scope e gestisci la dashboard OrbitPage end-to-end da script, n8n, backend o CI.

API v1https://orbitpage.com/api/v1HTTPS · JSON · UTF-8
  1. 01Token personale
  2. 02Controllo revisione
  3. 03Valida e pubblica
Confini API

Scegli l'API corretta

Questa pagina documenta il confine REST versionato. Un token OrbitPage non è una chiave provider OpenAI e non autentica mai gli endpoint privati della dashboard.

AmbitoCredenzialeScopo e supporto
API REST di automazioneop_pat_...API esterna supportata per script, n8n, backend server e CI. Gestisce il workspace vincolato al token tramite /api/v1.
OrbitPage AIop_pat_... + ai:read/ai:writeIl 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 dashboardSessione Firebase sul SaaS; sessione admin sull'OSSRoute private tra browser e app. Non sono un contratto stabile per integrazioni esterne e non devono ricevere token API personali.
Contratto

Panoramica API REST

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.

01
GET/api/v1/links

Leggi tutti i blocchi della pagina

Restituisce la collezione ordinata, l'identità del workspace e la revisione corrente.

Scope: links:read
02
PATCH/api/v1/links/{linkId}

Modifica un blocco esistente

Unisce i campi modificabili, valida l'intera pagina e pubblica la nuova revisione.

Scope: links:write
03
PUT/api/v1/links

Sostituisci l'intera collezione

Usalo per aggiungere, rimuovere o riordinare i blocchi dopo aver letto e conservato la collezione corrente.

Scope: links:write
Area dashboardPercorsi APIScope
Workspace e bozza completa/workspace · /draftworkspace:read
Profilo, tema e sottopagine/profile · /theme · /pagesprofile:* · theme:* · pages:*
Impostazioni generali, privacy e menu/settings/*settings:*
Pubblicazione, versioni e backup/publication · /versions · /backuppublication:* · 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:*
Apri la specifica OpenAPI 3.1
API v1 · 65 operazioni

Reference completa degli endpoint

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.

01
Workspace, contenuti e aspettoControlla il workspace vincolato al token e gestisci bozza completa, profilo, blocchi, tema e sottopagine.
11 operazioni
Metodo e percorsoOperazioneScope richiestoInput e controlli
GET/workspaceLeggi workspace, piano, accesso, utilizzo e revisioneworkspace:read—
GET/draftLeggi la bozza completa e modificabile della paginaworkspace:read—
GET/linksElenca i blocchi della pagina e la revisione correntelinks:read—
PUT/linksSostituisci l'intera collezione ordinata dei blocchilinks:writeLinksReplaceRequest · If-Match
PATCH/links/{linkId}Modifica i campi modificabili di un bloccolinks:writeLinkPatch · If-Match
GET/profileLeggi identità e metadati del profiloprofile:read—
PATCH/profileAggiorna i campi del profiloprofile:writeJSON · If-Match · ?publish=1
GET/themeLeggi il tema attivo della bozzatheme:read—
PUT/themeSostituisci il tema della bozzatheme:writeJSON · If-Match · ?publish=1
GET/pagesElenca le sottopagine configuratepages:read—
PUT/pagesSostituisci le sottopagine configuratepages:writearray | { pages } · If-Match · ?publish=1
02
Impostazioni e pubblicazioneControlla menu, privacy, file pubblici gestiti, generazione della sitemap e il ciclo esplicito dalla bozza alla pubblicazione.
9 operazioni
Metodo e percorsoOperazioneScope richiestoInput e controlli
GET/settingsLeggi impostazioni di menu, privacy, file di testo e sitemapsettings:read—
PUT/settings/menuAggiorna le impostazioni del menusettings:writeJSON · If-Match · ?publish=1
PUT/settings/privacyAggiorna le impostazioni di consenso e privacysettings:writeJSON · If-Match · ?publish=1
POST/settings/text-filesCrea un file di testo pubblico gestitosettings:writeTextFileCreateRequest · If-Match
PUT/settings/text-files/{key}Aggiorna un file di testo pubblico gestitosettings:writeTextFileUpdateRequest · If-Match
DELETE/settings/text-files/{key}Elimina un file di testo pubblico gestitosettings:writeIf-Match
POST/settings/sitemapRigenera la sitemap gestitasettings:writeIf-Match
GET/publicationLeggi lo stato di bozza e pubblicazionepublication:read—
POST/publicationPubblica l'ultima bozza validatapublication:write—
03
Versioni, backup e mediaRipristina contenuti versionati, esporta o importa i dati del workspace e usa il ciclo media prenota-carica-finalizza.
9 operazioni
Metodo e percorsoOperazioneScope richiestoInput e controlli
GET/versionsElenca le versioni pubblicate ripristinabili della paginabackup:read—
POST/versions/{revision}/restoreRipristina e pubblica subito una versione storicabackup:writeIf-Match
GET/backupEsporta un backup gestito del workspacebackup:read?sections=profile,links,…
POST/backup/restoreValida, ripristina e pubblica subito un backup gestitobackup:writeBackupRestoreRequest · If-Match
GET/mediaElenca metadati e utilizzo dei media del workspacemedia:read—
POST/media/cleanupVisualizza in anteprima o elimina i media non referenziatimedia:writeMediaCleanupRequest
POST/media/uploads/reservePrenota un caricamento diretto di mediamedia:writeMediaUploadReserveRequest
POST/media/uploads/finalizeFinalizza e registra un oggetto caricatomedia:writeUploadTokenRequest
DELETE/media/uploadsAnnulla un caricamento media prenotatomedia:writeUploadTokenRequest
04
Domini, 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 percorsoOperazioneScope richiestoInput e controlli
GET/domainsLeggi stato del dominio e requisiti DNSdomains:read—
POST/domainsCollega un dominio personalizzatodomains:writeDomainConnectRequest
POST/domains/refreshAggiorna verifica e attivazionedomains:write—
DELETE/domainsScollega il dominio personalizzatodomains:write—
GET/analyticsLeggi il report analytics della dashboardanalytics:read?days=7|30|90
GET/ai/allowanceLeggi disponibilità AI e utilizzo correnteai:read—
POST/ai/planGenera un'anteprima validata delle modifiche AIai:writeAiPlanRequest
POST/ai/commitApplica un'anteprima AI validata in precedenzaai:writeAiCommitRequest
05
ShopCollega il commercio, gestisci prodotti e aspetto, carica file protetti, quindi pubblica o ritira il blocco Shop sincronizzato.
10 operazioni
Metodo e percorsoOperazioneScope richiestoInput e controlli
GET/shopLeggi prodotti, ordini, clienti e stato di Shop; l'operazione può inizializzare dati privati di Shop e aggiornare lo stato Stripeshop:read?refresh=0|1
POST/shop/connectCrea o continua l'onboarding Stripe Connectshop:write—
POST/shop/productsCrea o aggiorna un prodotto Shopshop:writeShopProductRequest
DELETE/shop/products/{productId}Elimina un prodotto Shopshop:write—
PUT/shop/appearanceSostituisci l'intero aspetto di Shopshop:writeShopAppearanceRequest
POST/shop/publishPubblica Shop e il relativo blocco pagina sincronizzatoshop:write—
POST/shop/unpublishRitira Shop dalla pubblicazioneshop:write—
POST/shop/uploads/reservePrenota il caricamento di un file prodottoshop:writeShopFileUploadReserveRequest
POST/shop/uploads/finalizeFinalizza il caricamento di un file prodottoshop:writeShopUploadTokenRequest
DELETE/shop/uploadsAnnulla un caricamento di file prodotto prenotatoshop:writeShopUploadTokenRequest
06
NewsletterConfigura l'invio SMTP cifrato, gestisci gli iscritti con consenso e controlla l'intero ciclo delle campagne.
9 operazioni
Metodo e percorsoOperazioneScope richiestoInput e controlli
GET/newsletterLeggi iscritti, campagne e stato SMTPnewsletter:read—
PUT/newsletter/settingsAggiorna le impostazioni SMTP cifratenewsletter:writeNewsletterSmtpRequest
POST/newsletter/settings/testInvia un test di configurazionenewsletter:writeEmailRecipientRequest
POST/newsletter/subscribersAggiungi o aggiorna un iscritto con consensonewsletter:writeNewsletterSubscriberRequest
DELETE/newsletter/subscribers/{subscriberId}Rimuovi un iscrittonewsletter:write—
POST/newsletter/campaignsCrea o aggiorna una campagnanewsletter:writeNewsletterCampaignRequest
DELETE/newsletter/campaigns/{campaignId}Elimina una campagnanewsletter:write—
POST/newsletter/campaigns/{campaignId}/sendAccoda o programma una campagnanewsletter:writeNewsletterSendRequest
DELETE/newsletter/campaigns/{campaignId}/sendAnnulla una campagna in codanewsletter:write—
07
Team e fatturazioneGestisci collaboratori e inviti, controlla gli abbonamenti e apri sessioni autenticate di checkout o portale Stripe.
9 operazioni
Metodo e percorsoOperazioneScope richiestoInput e controlli
GET/teamElenca membri e inviti in attesateam:read—
POST/team/invitationsCrea un link di invito al workspace senza inviare emailteam:writeTeamInvitationRequest
PATCH/team/members/{memberUid}Aggiorna il ruolo di un membroteam:writeTeamRoleRequest
DELETE/team/members/{memberUid}Rimuovi un membro del workspaceteam:write—
DELETE/team/invitations/{invitationId}Revoca un invito in attesateam:write—
GET/billingLeggi lo stato di piano e abbonamentobilling:read—
POST/billing/checkoutCrea un checkout Stripe per un pianobilling:writeBillingCheckoutRequest
POST/billing/portalCrea una sessione del portale di fatturazione Stripebilling:writeBillingPortalRequest
POST/billing/promotion-codeRiscatta un codice promozionale e riconcilia i diritti del pianobilling:writePromotionCodeRedeemRequest
Apri il contratto OpenAPI 3.1 completo
Autenticazione

Crea e usa un token

Apri Dashboard > Team > 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.

01

Conferma la tua identità

La creazione del token è un'azione sensibile e richiede un'autenticazione Google o password recente.

02

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.

03

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.

04

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.

macOS / Linuxbash
export ORBITPAGE_TOKEN='op_pat_...'

curl --silent --show-error --include \
  --header "Authorization: Bearer $ORBITPAGE_TOKEN" \
  https://orbitpage.com/api/v1/links
WindowsPowerShell
$env:ORBITPAGE_TOKEN = 'op_pat_...'
$headers = @{ Authorization = "Bearer $env:ORBITPAGE_TOKEN" }

Invoke-RestMethod -Uri 'https://orbitpage.com/api/v1/links' -Headers $headers
GET /links

Leggi la collezione

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.

Risposta di esempioHTTP + JSON
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.
PATCH /links/{linkId}

Modifica un blocco

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.

Modifica un bloccocurl
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 campiEsempiComportamento
Contenutotitle, description, url, content, textItemsModificabili se validi per il tipo di blocco esistente.
Visibilità e tempiisActive, status, availability, startDate, endDate, timezoneValidati insieme alle regole di programmazione e del piano.
Aspetto e mediaicon, coverImage, backgroundColor, alignment, sizeAccettati solo quando i valori rispettano lo schema della pagina.
Protettiid, type, clickCount, ctaClicks, systemKeyIgnorati o rifiutati. I blocchi gestiti dal sistema non possono essere modificati con PATCH.
PUT /links

Sostituisci 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.

01GETLeggi tutti i blocchi e l'ETag
02Modifica in localeConserva ID e blocchi invariati
03PUT + If-MatchValida e pubblica
Script sicuro di lettura–modifica–scritturaNode.js 22+
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());
curl · n8n · OpenAPI

n8n e flussi end-to-end

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.

01

Community node n8n verificato

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.

02

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.

03

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.

04

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.

OrbitPage è approvato da n8n come Verified Community Node; resta gestito dalla community e non è preinstallato. Quando compare nel catalogo verificato, il proprietario o un amministratore dell'istanza può cercare OrbitPage dal pannello + dei nodi, selezionare More from the community e scegliere Install, anche su n8n Cloud. Se non è ancora elencato, su Cloud occorre attendere la pubblicazione nel catalogo; su n8n self-hosted si può installare n8n-nodes-orbitpage da Settings → Community Nodes.

Installazione, download e workflow di esempio

Avvio rapido del community node n8nn8n
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)
Caricamento media in tre passaggiHTTP + JSON
# 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>" }
Flusso AI con revisione preventivaHTTP + JSON
# 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 }
Test della credenziale

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.

Risoluzione problemi n8n

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.

Leggi la guida completa del community node n8n

Operatività

CI, rotazione e revoca

Un workspace supporta fino a dieci token personali attivi per utente. L'elenco dei token in Team 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.

GitHub ActionsYAML
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.
Gestione degli errori

Errori e tentativi

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.

400INVALID_JSON · LINKS_REQUIRED · LINK_PATCH_INVALIDCorreggi il body della richiesta o i campi rifiutati dallo schema della pagina.
401PERSONAL_TOKEN_*Sostituisci un token mancante, non valido, scaduto o revocato. Non riprovare con lo stesso segreto.
403PERSONAL_TOKEN_SCOPE_DENIED · SYSTEM_LINK_PROTECTEDUsa lo scope richiesto oppure interrompi: l'identità corrente non può eseguire questa operazione.
404LINK_NOT_FOUNDRileggi la collezione: l'ID del blocco potrebbe essere stato rimosso o sostituito.
409revision_conflictEsegui di nuovo GET, riapplica la modifica sul nuovo stato e riprova con la nuova revisione.
413REQUEST_TOO_LARGEMantieni il body JSON entro 768 KiB.
415UNSUPPORTED_CONTENT_ENCODINGInvia un body JSON non compresso.
428revision_requiredAggiungi If-Match usando la revisione o l'ETag restituito dall'ultima GET.
429RATE_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.

Sicurezza

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.

Confine tra edizioni

SaaS e open source

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.

Leggi il confine API dell'open source