डैशबोर्ड जो कुछ करता है, वह सब आपके टर्मिनल से
एक खाता की। अपनी साइटें देखिए, उन पर डिप्लॉय कीजिए, नाम बदलिए, फ़ॉर्म ने जो जुटाया वह पढ़िए, उन्हें मिटाइए — सादे 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/v1 | Check that a credential works. |
| GET | /api/v1/keys | The account's API keys. Revoked keys are not listed. |
| POST | /api/v1/keys | Create an API key. |
| DELETE | /api/v1/keys/{keyId} | Revoke an API key. Anything using it stops working immediately. |
| GET | /api/v1/me | The account a credential belongs to. |
| GET | /api/v1/sites | List the account's sites, newest first. |
| POST | /api/v1/sites | Create 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}/deploy | Replace every file of a site with the uploaded set. |
| POST | /api/v1/sites/{id}/deploy-token | Issue a new deploy token for a site. The old one stops working immediately. |
| POST | /api/v1/sites/{id}/deploy/zip | Replace every file of a site from a zip archive sent as the raw request body. |
| GET | /api/v1/sites/{id}/files | Every file a site is serving. |
| POST | /api/v1/sites/{id}/files | Add or overwrite individual files, leaving the rest of the site alone. |
| DELETE | /api/v1/sites/{id}/submissions | Delete every submission for a site, or every one of a single form. |
| GET | /api/v1/sites/{id}/submissions | One 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/csv | Export a site's form submissions as CSV. |
| POST | /api/v1/sites/{id}/submissions/read | Mark every unread submission as read. |
| GET | /api/v1/sites/{id}/submissions/summary | How many submissions a site holds, how many are unread, and which forms exist. |
हर विफलता का रूप एक ही है
कोड पर शाखा बनाइए, संदेश पर कभी नहीं। कोड स्थिर हैं; वाक्य उसके लिए है जो लॉग पढ़ता है।
{
"error": {
"code": "subdomainTaken",
"message": "That address is already taken. Try another."
}
}