FORMQUOTE / API
Des produits différents. Une seule API de devis.
Trois catégories numériques disposent d’un catalogue et de devis publics ; le PCB conserve l’authentification opérateur. Les résultats indiquent adéquation, sources et suite possible. Aucun paiement, achat, vérification d’e-mails ou livraison automatique n’est exécuté.
OpenAPI 3.1 ↗ · JSON Schema ↗ · Capabilities ↗ · Référence technique originale complète (chinois) ↗
https://pcba-quote-lab.pages.dev/api/v2Points d’accès
GET /api/v2/categories | Catégories, champs, valeurs par défaut et schémas. |
|---|---|
GET /api/v2/catalog | Catalogue numérique ; filtre categoryId, hors pcb. |
GET /api/v2/capabilities | Capacités réelles d’authentification, devis, transaction et livraison. |
POST /api/v2/quotes | Résultats unifiés. Numérique public ; jeton Bearer opérateur requis pour PCB. |
POST /api/v1/offers | Contrat et authentification PCB d’origine inchangés. |
Requêtes et exemples
Envoyez Content-Type: application/json et un corps UTF-8 de 32 Kio maximum. Quantités, spécifications et usages uniquement, pas de listes, fichiers de fabrication, polices ou audio. schemaVersion reste à 1. Les exemples ne créent pas de transactions.
email_verification
curl 'https://pcba-quote-lab.pages.dev/api/v2/quotes' \
--header 'Content-Type: application/json' \
--data '{
"schemaVersion": 1,
"categoryId": "email_verification",
"specifications": {
"count": 10001
},
"comparisonGoal": "lowest_cash_now"
}'sound_effects
curl 'https://pcba-quote-lab.pages.dev/api/v2/quotes' \
--header 'Content-Type: application/json' \
--data '{
"schemaVersion": 1,
"categoryId": "sound_effects",
"specifications": {
"intent": "ui",
"seats": 1,
"aiUse": false
},
"usageContext": {
"commercialUse": true,
"standaloneResale": false
},
"comparisonGoal": "best_requirement_fit"
}'font_license
curl 'https://pcba-quote-lab.pages.dev/api/v2/quotes' \
--header 'Content-Type: application/json' \
--data '{
"schemaVersion": 1,
"categoryId": "font_license",
"specifications": {
"licenseUse": "web",
"seats": 1,
"websites": 1,
"monthlyPageviews": 10000,
"trafficMetric": "pv",
"termYears": 1
},
"usageContext": {
"medium": "website",
"commercialProjects": 1,
"requiresAllStyles": false
},
"comparisonGoal": "best_requirement_fit"
}'Critères par catégorie
E-mails : count de 1 à 10 000 000 ; soldes déclarés dans purchaseContext.creditsBySupplier, crédits expirés exclus. Sons : intent any/ui/motion/nature/train/kettle ; seats de 1 à 1000 ; aiUse vise l’audio lui-même. Polices : licenseUse web/desktop/both ; utilisateurs, sites, trafic mensuel par site, pv/uv et années séparés. Aucune conversion PV/UV ni couverture automatique des apps, SaaS ou logos. Limites exactes dans OpenAPI.
Modèle commun, règles distinctes
Category définit les entrées. QuoteRequest contient specifications, usageContext et purchaseContext. CatalogItem et Supplier identifient produit et fournisseur. Offer relie résultat et demande. Pricing sépare les montants ; PricingEvidence conserve les sources ; RequirementMatch utilise yes/no/unknown ; ComparisonGroup définit les groupes ; Fulfillment indique uniquement les actions disponibles.
Prix, devises et classement
referencePrice : prix catalogue ; quotedSubtotal : sous-total applicable. cashRequiredNow exige les frais obligatoires confirmés. allocatedJobCost répartit l’usage, pas le paiement du forfait. recurringCharge identifie l’abonnement ; requestedTermCost n’est pas le prix annuel multiplié. Montants en chaînes décimales ou null, jamais zéro pour inconnu. Suivez groups[].offerIds, sans promettre le coût livré minimal entre devises, périodes ou délais PCB distincts.
Sources et actualité
published_observed conserve les observations publiques ; derived_estimate calcule à partir d’elles ; supplier_live sert aux estimations PCB visibles, sans prix final garanti. generatedAt diffère de checkedAt. Révision : sept jours pour les e-mails, trente pour sons et polices, cinq minutes maximum pour PCB. Appeler l’API ne rajeunit pas les sources. Conservez sourceUrl et motifs d’inadéquation.
États et erreurs
HTTP 200 peut contenir partial ou blocked. Ces états décrivent la complétude, pas une commande. Lisez offers, eligibility, supplierErrors, missingInputs et le format error.code/message. 400 : corriger les entrées ; 401/403 : droits PCB et Origin ; 405/413/415 : méthode, taille, type. Après 502, ne substituez jamais un ancien devis. L’ID de requête n’est pas un numéro de commande.
Intégration IA et permissions
Ne publiez que email_verification, sound_effects et font_license avec DigitalQuoteRequest. Le PCB exige des identifiants opérateur autorisés ; contrôles Origin et authentification inchangés. Ne distribuez jamais ces identifiants aux clients ou IA publiques. merchant_checkout/inquiry ouvre seulement le marchand, sans achat, message ou licence confirmés. order/payment/automaticFulfillment sont désactivés.
Internationalisation et compatibilité
Pages disponibles en /zh/, /en/, /ja/, /fr/ et /de/. Seul l’affichage change ; chemins API, champs et enums restent identiques. N’ajoutez pas de champ locale non déclaré. Aucune conversion monétaire. Les preuves fournisseurs originales sont identifiées et conservées. Le PCB dépend d’un ancien déploiement à ne pas supprimer avant migration validée.