Scambia un codice di abbinamento con un token per dispositivo
package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://example.com/api/device/v1/pair"
payload := strings.NewReader("{ \"code\": \"example\", \"name\": \"example\", \"platform\": \"ios\", \"kind\": \"mobile\", \"app_version\": \"example\" }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}const url = 'https://example.com/api/device/v1/pair';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"code":"example","name":"example","platform":"ios","kind":"mobile","app_version":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/api/device/v1/pair \ --header 'Content-Type: application/json' \ --data '{ "code": "example", "name": "example", "platform": "ios", "kind": "mobile", "app_version": "example" }'Spec 29.2. Non autenticato, limitato per IP (10 tentativi al minuto). Il codice è monouso: lo scambio lo consuma con un UPDATE condizionale, quindi due richieste concorrenti con lo stesso codice producono un solo token. Codice inesistente, scaduto o già usato rispondono tutti 400 pairing_code_invalid (nessun oracolo). Il token (ar_dev_<prefix>_<secret>) è restituito solo qui; il server conserva lo SHA-256. Si usa poi come Authorization: Bearer sulle API admin (permessi del ruolo dell’utente nello stabilimento del codice) e sulle API /api/device/v1. Nessun cookie, quindi nessun CSRF.
Request Bodyrequired
Sezione intitolata “Request Bodyrequired”object
Nome mostrato nel pannello (es. “iPhone di Anna”, “PC cassa”).
mobile: app mobile (M7). desktop: app desktop in modalità remota (M6).
Responses
Sezione intitolata “Responses”Dispositivo abbinato
object
Token per dispositivo, restituito solo ora. Conservarlo nel portachiavi sicuro del dispositivo.
object
mobile: app mobile (M7). desktop: app desktop in modalità remota (M6).
Parte visibile del token (ar_dev_<prefix>), per riconoscerlo.
Vero se la richiesta è autenticata con il token di questo dispositivo.
Vero se il dispositivo è il ponte fiscale attivo dello stabilimento.
Example
{ "device": { "role": "owner", "platform": "ios", "kind": "mobile" }}Richiesta non valida
Errore RFC 9457 (application/problem+json).
object
Slug stabile del tipo di errore. I client devono basarsi su questo
valore, mai sul testo di title o detail.
Secondi da attendere (solo per rate_limited).
object
Versione corrente della risorsa (solo per version_conflict).
Postazioni con allocazioni future (solo per spot_has_future_allocations).
Vincoli violati (solo per policy_violation).
object
Codice stabile (es. lead_time_too_short).
object
Mezze giornate non disponibili (solo per spot_unavailable, pool_exhausted, quota_exceeded).
Mezza giornata non disponibile per una risorsa (spec 7.2), restituita in Problem.conflicts e nelle anteprime.
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Fascia: mattina o pomeriggio.
Stato della prenotazione (spec 10.2).
Cliente già presente con la stessa email o telefono (solo per conflict su createCustomer).
Periodo del soggiorno e data odierna dello stabilimento (solo per booking_outside_period).
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Example
{ "type": "bad_request", "conflicts": [ { "slot": "AM", "reason": "spot_unavailable" } ], "current_status": "draft"}Troppe richieste
Errore RFC 9457 (application/problem+json).
object
Slug stabile del tipo di errore. I client devono basarsi su questo
valore, mai sul testo di title o detail.
Secondi da attendere (solo per rate_limited).
object
Versione corrente della risorsa (solo per version_conflict).
Postazioni con allocazioni future (solo per spot_has_future_allocations).
Vincoli violati (solo per policy_violation).
object
Codice stabile (es. lead_time_too_short).
object
Mezze giornate non disponibili (solo per spot_unavailable, pool_exhausted, quota_exceeded).
Mezza giornata non disponibile per una risorsa (spec 7.2), restituita in Problem.conflicts e nelle anteprime.
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Fascia: mattina o pomeriggio.
Stato della prenotazione (spec 10.2).
Cliente già presente con la stessa email o telefono (solo per conflict su createCustomer).
Periodo del soggiorno e data odierna dello stabilimento (solo per booking_outside_period).
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Example
{ "type": "bad_request", "conflicts": [ { "slot": "AM", "reason": "spot_unavailable" } ], "current_status": "draft"}Headers
Sezione intitolata “Headers”Secondi da attendere
Operazione non ancora disponibile (not_implemented)
Errore RFC 9457 (application/problem+json).
object
Slug stabile del tipo di errore. I client devono basarsi su questo
valore, mai sul testo di title o detail.
Secondi da attendere (solo per rate_limited).
object
Versione corrente della risorsa (solo per version_conflict).
Postazioni con allocazioni future (solo per spot_has_future_allocations).
Vincoli violati (solo per policy_violation).
object
Codice stabile (es. lead_time_too_short).
object
Mezze giornate non disponibili (solo per spot_unavailable, pool_exhausted, quota_exceeded).
Mezza giornata non disponibile per una risorsa (spec 7.2), restituita in Problem.conflicts e nelle anteprime.
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Fascia: mattina o pomeriggio.
Stato della prenotazione (spec 10.2).
Cliente già presente con la stessa email o telefono (solo per conflict su createCustomer).
Periodo del soggiorno e data odierna dello stabilimento (solo per booking_outside_period).
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Example
{ "type": "bad_request", "conflicts": [ { "slot": "AM", "reason": "spot_unavailable" } ], "current_status": "draft"}
