http api

डैशबोर्ड जो कुछ करता है, वह सब आपके टर्मिनल से

एक खाता की। अपनी साइटें देखिए, उन पर डिप्लॉय कीजिए, नाम बदलिए, फ़ॉर्म ने जो जुटाया वह पढ़िए, उन्हें मिटाइए — सादे HTTP पर, किसी स्क्रिप्ट, CI जॉब या एजेंट से।

तेज़ शुरुआत

तीन कमांड

अपने डैशबोर्ड पर की बनाइए, जाँचिए कि वह चलती है, और एक फ़ोल्डर ऑनलाइन कीजिए। की हर कॉल में Authorization हेडर में जाती है।

जाँचिए कि की चलती है
curl -H "Authorization: Bearer hvs_…" https://harvis.dev/api/v1
देखिए खाते में क्या है
curl -H "Authorization: Bearer hvs_…" https://harvis.dev/api/v1/sites
एक फ़ोल्डर प्रकाशित कीजिए
curl -X POST https://harvis.dev/api/v1/sites \
  -H "Authorization: Bearer hvs_…" \
  -F "files=@index.html" -F "paths=index.html"
एक अनुबंध

वेब ऐप और API अलग-अलग नहीं जा सकते

हर क्षमता एक ही फ़ाइल में एक ही बार घोषित होती है, और डैशबोर्ड तथा यह API दोनों उसी से बनते हैं। openapi.json उसी घोषणा से बनता है, और दोनों में फ़र्क आते ही बिल्ड गिर जाता है। तो यह उत्पाद का वर्णन करने वाला दस्तावेज़ नहीं है — यह वही है जिससे उत्पाद बना है।

  • हर क्षमता का एक ही कार्यान्वयन, जिसे वेब ऐप और आपकी स्क्रिप्ट दोनों बुलाते हैं।
  • openapi.json बनाया जाता है, हाथ से कभी नहीं लिखा जाता, और /openapi.json पर परोसा जाता है।
  • जैसे ही रूट, अनुबंध और दस्तावेज़ का मेल टूटता है, बिल्ड गिर जाता है।
डिप्लॉय

की हो तो साइट तुरंत आपकी है

बिना खाते के डिप्लॉय अब भी चलता है और हमेशा चलेगा — आपको एक निजी क्लेम लिंक मिलता है, जिसे बाद में खोलिए। उसी कॉल में की भेज दीजिए तो क्लेम करने को कुछ बचता ही नहीं: साइट पहले बाइट से आपके खाते में है, और कभी समाप्त नहीं होती।

zip -r site.zip . && curl -X POST https://harvis.dev/api/upload \
  -H "Authorization: Bearer hvs_…" \
  -H "Content-Type: application/zip" --data-binary @site.zip
एंडपॉइंट

पूरी सतह

अनुरोध और उत्तर के पूरे रूप OpenAPI दस्तावेज़ में हैं।

मेथडपथक्या करता है
GET/api/v1Check that a credential works.
GET/api/v1/keysThe account's API keys. Revoked keys are not listed.
POST/api/v1/keysCreate an API key.
DELETE/api/v1/keys/{keyId}Revoke an API key. Anything using it stops working immediately.
GET/api/v1/meThe account a credential belongs to.
GET/api/v1/sitesList the account's sites, newest first.
POST/api/v1/sitesCreate a site from a folder of files.
DELETE/api/v1/sites/{id}Delete a site, its files and its form submissions.
GET/api/v1/sites/{id}One site.
PATCH/api/v1/sites/{id}Rename a site, change its web address, or both.
POST/api/v1/sites/{id}/deployReplace every file of a site with the uploaded set.
POST/api/v1/sites/{id}/deploy-tokenIssue a new deploy token for a site. The old one stops working immediately.
POST/api/v1/sites/{id}/deploy/zipReplace every file of a site from a zip archive sent as the raw request body.
GET/api/v1/sites/{id}/filesEvery file a site is serving.
POST/api/v1/sites/{id}/filesAdd or overwrite individual files, leaving the rest of the site alone.
DELETE/api/v1/sites/{id}/submissionsDelete every submission for a site, or every one of a single form.
GET/api/v1/sites/{id}/submissionsOne page of a site's form submissions, newest first.
DELETE/api/v1/sites/{id}/submissions/{submissionId}Delete one submission.
GET/api/v1/sites/{id}/submissions/{submissionId}One submission.
GET/api/v1/sites/{id}/submissions/csvExport a site's form submissions as CSV.
POST/api/v1/sites/{id}/submissions/readMark every unread submission as read.
GET/api/v1/sites/{id}/submissions/summaryHow many submissions a site holds, how many are unread, and which forms exist.
त्रुटियाँ

हर विफलता का रूप एक ही है

कोड पर शाखा बनाइए, संदेश पर कभी नहीं। कोड स्थिर हैं; वाक्य उसके लिए है जो लॉग पढ़ता है।

{
  "error": {
    "code": "subdomainTaken",
    "message": "That address is already taken. Try another."
  }
}