summaryrefslogtreecommitdiff
path: root/API.md
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-08-02 15:29:36 -0500
committerChristian Cleberg <[email protected]>2026-08-02 15:29:36 -0500
commitac3dccd27c8f2de325fde1394c92a6091f27555c (patch)
tree9bdf12f3727086ee6ae73dd3b8b39ed0f5067a1a /API.md
parent219c5401387339f5ebc025d8c89be14552c1cc21 (diff)
downloadrune-main.tar.gz
rune-main.tar.bz2
rune-main.zip
convert readme to nfo; convert docs to txt; relicense to 0bsdHEADmain
Diffstat (limited to 'API.md')
-rw-r--r--API.md797
1 files changed, 0 insertions, 797 deletions
diff --git a/API.md b/API.md
deleted file mode 100644
index 74c231c..0000000
--- a/API.md
+++ /dev/null
@@ -1,797 +0,0 @@
-API Documentation
------------------
-
-API Endpoint: **https://njal.la/api/1/**
-Requests follow the JSON-RPC 2.0 protocol.
-You can use session cookies or token based authentication.
-POST JSON body to the API Endpoint:
-
- {
- "jsonrpc": "2.0",
- "method": "...",
- "params": {...},
- "id": "123"
- }
-
-and you will get a JSON response. Success:
-
- {
- "jsonrpc": "2.0",
- "result": {}.
- "id": "123"
- }
-
-or error:
-
- {
- "jsonrpc": "2.0",
- "error": {
- "code": 0
- "message": ""
- },
- "id": "123"
- }
-
-Example using python requests
-
- import requests
-
- def njalla(method, **params):
- url = 'https://njal.la/api/1/'
- token = '<your-api-token>'
- headers = {
- 'Authorization': 'Njalla ' + token
- }
- response = requests.post(url, json={
- 'method': method,
- 'params': params
- }, headers=headers).json()
- if 'result' not in response:
- raise Exception('API Error', response)
- return response['result']
-
-
- print(njalla('list-domains'))
- print(njalla('get-domain', domain='example.com'))
-
-
-Example using curl
-
- NJALLA_TOKEN='<your-api-token>'
- curl -s \
- -H "Accept: application/json" \
- -H "Content-Type: application/json" \
- -H "Authorization: Njalla ${NJALLA_TOKEN}" \
- --data '{"method":"get-domain", "params": {"domain": "exampe.com"}}' \
- https://njal.la/api/1/
-
-
-api
-===
-
-add-token
-
-Add a new API token
-
- params: {
- comment: string (optional)
- from: [string] (optional) array of IPv4 or IPv6 IPs or networks
- that are allowed to use the token.
- i.e.: ['8.8.8.8', '192.168.0.0/24']
- allowed_domains: [string] (optional) restrict token to subset of your domains
- allowed_servers: [string] (optional) restrict token to subset of your servers by id
- allowed_methods: [string] (optional) restrict token to subset of possible API calls
- allowed_prefixes: [string] (optional) restrict token to DNS record name prefixes
- allowed_types: [string] (optional) restrict token to subset of possible types of DNS records
- acme: bool (optional) syntax sugar adding allowed_methods,
- allowed_prefixes and allowed_types
- needed for ACME DNS challenge
- }
- returns: {
- }
-
-check-task
-
-Check status of a long running task
-
- params: {
- id: string
- }
- returns: {
- id: string
- status: object
- }
-
-edit-token
-
-Edit API token
-
- params: {
- key: string
- comment: string (optional)
- from: [string] (optional) array of IPv4 or IPv6 IPs or networks
- that are allowed to use the token.
- i.e.: ['8.8.8.8', '192.168.0.0/24']
- allowed_domains: [string] (optional) restrict token to subset of your domains
- allowed_servers: [string] (optional) restrict token to subset of your servers by id
- allowed_methods: [string] (optional) restrict token to subset of possible API calls
- allowed_prefixes: [string] (optional) restrict token to DNS record name prefixes
- allowed_types: [string] (optional) restrict token to subset of possible types of DNS records
- }
- returns: {
- }
-
-list-tokens
-
-List existing API authorization tokens.
-
- params: {
- }
- returns: {
- tokens: [...]
- }
-
-remove-token
-
-Remove an existing API token
-
- params: {
- key: string
- }
- returns: {
- }
-
-domain
-======
-
-add-dnssec
-
-Add DNSSEC record for domain
-
- params: {
- domain: string
- algorithm: integer
-
- digest: string
- digest_type: integer
- key_tag: integer
-
- or
-
- public_key: string
- }
- returns: {
- }
-
-add-forward
-
-Add email forward
-
- params: {
- domain: string
- from: string
- to: string
- }
- returns: {
- domain: string
- from: string
- to: string
- }
-
-add-glue
-
-Add glue record for the domain, name is the subdomain
-
- params: {
- domain: string
- name: string
- address4: string
- address6: string
- }
- returns: {
- }
-
-add-record
-
-Add new DNS Record to domain
-
- params: {
- domain: string
- type: string (types: A, AAAA, ANAME, CAA, CNAME, DS, Dynamic, HTTPS, MX, NAPTR, NS, PTR, SRV, SSHFP, SVCB, TLSA, TXT)
- name: string (all types)
- content: string (types: A, AAAA, ANAME, CAA, CNAME, DS, MX, NAPTR, NS, PTR, Redirect, SRV, SSHFP, Static, TLSA, TXT)
- ttl: int (types: A, AAAA, ANAME, CAA, CNAME, DS, MX, NAPTR, NS, PTR, Redirect, SRV, SSHFP, TLSA, TXT)
- prio: int (types: HTTPS, MX, Redirect, SRV, SVCB)
- weight: int (types: SRV)
- port: int (types: SRV)
- target: string (types: HTTPS, SVCB)
- ssh_algorithm: int (types: SSHFP, values: 1-5 // RSA, DSA, ECDSA, Ed25519, XMSS)
- ssh_type: int (types: SSHFP, values: 1-2 // SHA-1, SHA-256)
- }
- returns: {
- id: string
- domain: string
- type: string (types: A, AAAA, ANAME, CAA, CNAME, DS, Dynamic, HTTPS, MX, NAPTR, NS, PTR, SRV, SSHFP, SVCB, TLSA, TXT)
- name: string (all types)
- content: string (types: A, AAAA, ANAME, CAA, CNAME, DS, MX, NAPTR, NS, PTR, Redirect, SRV, SSHFP, Static, TLSA, TXT)
- ttl: int (types: A, AAAA, ANAME, CAA, CNAME, DS, MX, NAPTR, NS, PTR, Redirect, SRV, SSHFP, TLSA, TXT)
- prio: int (types: HTTPS, MX, Redirect, SRV, SVCB)
- weight: int (types: SRV)
- port: int (types: SRV)
- target: string (types: HTTPS, SVCB)
- ssh_algorithm: int (types: SSHFP, values: 1-5 // RSA, DSA, ECDSA, Ed25519, XMSS)
- ssh_type: int (types: SSHFP, values: 1-2 // SHA-1, SHA-256)
- }
-
-edit-domain
-
-Edit domain configuration
-
- params: {
- domain: string
- ...
- }
- possible keys:
- mailforwarding: boolean
- dnssec: boolean
- lock: boolean
- contacts: custom whois contact ids
- nameservers: list of custom nameservers or empty list to use our nameservers
-
- returns: {
- name: string,
- ...
- }
-
-edit-glue
-
-Edit glue record
-
- params: {
- domain: string
- name: string
- address4: string
- address6: string
- }
- returns: {
- }
-
-edit-record
-
-Edit DNS Record
-
- params: {
- id: string
- domain: string
- type: string (types: A, AAAA, ANAME, CAA, CNAME, DS, Dynamic, HTTPS, MX, NAPTR, NS, PTR, SRV, SSHFP, SVCB, TLSA, TXT)
- name: string (all types)
- content: string (types: A, AAAA, ANAME, CAA, CNAME, DS, MX, NAPTR, NS, PTR, Redirect, SRV, SSHFP, Static, TLSA, TXT)
- ttl: int (types: A, AAAA, ANAME, CAA, CNAME, DS, MX, NAPTR, NS, PTR, Redirect, SRV, SSHFP, TLSA, TXT)
- prio: int (types: HTTPS, MX, Redirect, SRV, SVCB)
- weight: int (types: SRV)
- port: int (types: SRV)
- target: string (types: HTTPS, SVCB)
- ssh_algorithm: int (types: SSHFP, values: 1-5 // RSA, DSA, ECDSA, Ed25519, XMSS)
- ssh_type: int (types: SSHFP, values: 1-2 // SHA-1, SHA-256)
- }
- returns: {
- domain: string
- type: string (types: A, AAAA, ANAME, CAA, CNAME, DS, Dynamic, HTTPS, MX, NAPTR, NS, PTR, SRV, SSHFP, SVCB, TLSA, TXT)
- name: string (all types)
- content: string (types: A, AAAA, ANAME, CAA, CNAME, DS, MX, NAPTR, NS, PTR, Redirect, SRV, SSHFP, Static, TLSA, TXT)
- ttl: int (types: A, AAAA, ANAME, CAA, CNAME, DS, MX, NAPTR, NS, PTR, Redirect, SRV, SSHFP, TLSA, TXT)
- prio: int (types: HTTPS, MX, Redirect, SRV, SVCB)
- weight: int (types: SRV)
- port: int (types: SRV)
- target: string (types: HTTPS, SVCB)
- ssh_algorithm: int (types: SSHFP, values: 1-5 // RSA, DSA, ECDSA, Ed25519, XMSS)
- ssh_type: int (types: SSHFP, values: 1-2 // SHA-1, SHA-256)
- }
-
-find-domains
-
-Find new domains
-
- params: {
- query: string
- }
- returns: {
- domains: [
- {price: int, status: string, name: string}
- ]
- }
-
-get-domain
-
-Get information about one of your domains
-
- params: {
- domain: string
- }
- returns: {
- name: string,
- ...
- }
-
-get-tlds
-
-Get list of supported TLDs
-
- params: {
- }
- returns: {
- tld: {price: int, max_year: int, dnssec: boolean},
- }
-
-import-zone
-
-Import BIND zone file
-
- params: {
- domain: string
- zone: string
- }
- returns: {
- }
-
-list-dnssec
-
-List DNSSEC records for domain
-
- params: {
- domain: string
- }
- returns: {
- dnssec: list
- }
-
-list-domains
-
-Get list of your domains
-
- params: {
- }
- returns: {
- domains: list
- }
-
-list-forwards
-
-List existing email forwards
-
- params: {
- domain: string
- }
- returns: {
- forwards: list
- }
-
-list-glue
-
-List glue records for domain
-
- params: {
- domain: string
- }
- returns: {
- glue: list
- }
-
-list-records
-
-List DNS records for given domain
-
- params: {
- domain: string
- }
- returns: {
- records: list
- }
-
-register-domain
-
-Register a new domain
-
- params: {
- domain: string
- years: int (default: 1)
- }
- returns: {
- task: string
- }
- use check-task for response
-
-remove-dnssec
-
-Remove DNSSEC record from domain
-
- params: {
- domain: string
- id: string
- }
- returns: {
- }
-
-remove-forward
-
-Remove email forward
-
- params: {
- domain: string
- from: string
- to: string
- }
- returns: {
- }
-
-remove-glue
-
-Remove glue record
-
- params: {
- domain: string
- name: string
- }
- returns: {
- }
-
-remove-record
-
-Remove DNS Record
-
- params: {
- domain: string
- id: string
- name: string // optional
- type: string // optional
- ... // optional
- }
-
- remove a dns record by id
- or multiple records by passing name, type and any other existing record's field
-
- returns: {
- records: list
- }
-
-renew-domain
-
-Renew one of your domains
-
- params: {
- domain: string
- years: int (default: 1)
- }
- returns: {
- task: string
- }
- use check-task for response
-
-server
-======
-
-add-server
-
-Create a new server with the given name, type, os and ssh\_key. Returns an id of the newly created server
-
- params: {
- name: string,
- type: string
- os: string
- ssh_key: string
- months: int (max 12)
- autorenew: bool
- }
- returns: {
- id: string
- ...
- }
-
-add-traffic
-
-Add extra traffic package.
-
- params: {
- id: string
- amount: int
- months: int
- starts_today: bool
- }
- returns: {
- ...
- }
-
-edit-server
-
-Edit an existing server identified by id
-
- params: {
- id: string
- name: string,
- type: string
- ssh_key: string
- reverse_name: string
- autorenew: bool
- }
- returns: {
- ...
- }
-
-get-server
-
-Returns information about one of your servers
-
- params: {
- id: string
- }
- returns: {
- ...
- }
-
-list-server-images
-
-Returns a list of server images that can be used for new servers
-
- params: {
- }
- returns: {
- images: list
- }
-
-list-server-types
-
-Returns a list of server types that can be used for new servers
-
- params: {
- }
- returns: {
- types: list
- }
-
-list-servers
-
-Returns a list of your servers
-
- params: {
- }
- returns: {
- servers: list
- }
-
-list-traffic
-
-List extra traffic packages per server.
-
- params: {
- id: string # server id
- }
- returns: {
- traffic: []
- }
-
-remove-server
-
-Remote an existing server, your server will be stopped and all data deleted.
-
- params: {
- id: string
- }
- returns: {
- task: string
- }
-
-renew-server
-
-Renew an existing server identified by id, your wallet must have enough credit to complete this operation.
-
- params: {
- id: string
- months: int
- }
- returns: {
- ...
- }
-
-reset-server
-
-Reset existing server and reinstall the given os. All data will be lost. Required field: \`id\`
-
- params: {
- id: string
- os: string
- ssh_key: string
- type: string
- }
- returns: {
- ...
- }
-
-restart-server
-
-Restart existing server
-
- params: {
- id: string
- }
- returns: {
- ...
- }
-
-start-server
-
-Start existing server
-
- params: {
- id: string
- }
- returns: {
- ...
- }
-
-stop-server
-
-Stop existing server
-
- params: {
- id: string
- }
- returns: {
- ...
- }
-
-user
-====
-
-delete-account
-
-Delete your account. You can only delete the account if all domains and servers have been removed and your wallet is empty.
-
- params: {
- }
- returns: {
- }
-
-login
-
-Login into an existing account (cookie based session). Consider using API tokens instead
-
- params: {
- email: string [or] xmpp: string
- password: string
- }
- returns: {
- }
-
-logout
-
-Logout and end your current session
-
- params: {
- }
- returns: {
- }
-
-vpn
-===
-
-add-vpn
-
-Add a new VPN client Returns an id
-
- params: {
- name: string,
- autorenew: boolean
- }
- returns: {
- id: string
- ...
- }
-
-edit-vpn
-
-Edit an existing VPN identified by id
-
- params: {
- id: string
- name: string,
- autorenew: boolean
- backend: wireguard|openvpn
- publickey: WireGuard PublicKey, set to your public key or null to generate a new one
- }
- returns: {
- ...
- }
-
-get-vpn
-
-Returns information about VPN
-
- params: {
- id: string
- }
- returns: {
- ...
- }
-
-list-vpns
-
-Returns a list of your VPNs
-
- params: {
- }
- returns: {
- vpns: list
- }
-
-remove-vpn
-
-Remove an existing VPN
-
- params: {
- id: string
- }
- returns: {
- ...
- }
-
-renew-vpn
-
-Renew an existing VPN identified by id, your wallet must have enough credit to complete this operation.
-
- params: {
- id: string
- months: int
- }
- returns: {
- ...
- }
-
-wallet
-======
-
-add-payment
-
-Refill your wallet
-
- params: {
- amount: int (5 or multiple of 15, max: 300)
- via: string (options: paypal, bitcoin, litecoin, monero, zcash, ethereum)
- }
- returns: {
- amount: int
- address: string (payment address)
- url: string (paypal url to process payment)
- }
-
-get-balance
-
- params: {
- }
- returns: {
- balance: int (in euros)
- }
-
-get-payment
-
-Get details about a payment
-
- params: {
- id: string
- }
- returns: {
- id: string
- amount: int
- status: string
- address: string
- url: string
- }
-
-list-transactions
-
-List transactions (payments, registrations, renewals, etc..) of the last 90 days
-
- params: {
- }
- returns: {
- transactions: list
- }