SkillAgentSearch skills...

Shkeeper.io

SHKeeper is a self-hosted and open-source cryptocurrency gateway payment processor. It's integrate with popular CMS, any e-commerce, your own code or product

Install / Use

/learn @vsys-host/Shkeeper.io

README

SHKeeper.io<!-- omit in toc -->

SHKeeper logo

<a name="about-shkeeper"></a>

1. About SHKeeper

SHKeeper - is an open-source, self-hosted cryptocurrency payment processor. It uniquely serves as both a gateway and a merchant, enabling you to accept payments in various cryptocurrencies without fees and intermediaries.

<a name="demo"></a>

1.1. Demo

SHKeeper demo version is available from us (works in testnet network), so you can try it yourself without installing it:

https://demo.shkeeper.io/

Login: admin

Password: admin

<a name="helpful-links"></a>

1.2. Helpful links

Details of the latest version can be found here: https://github.com/vsys-host/shkeeper.io/commits/main/

Find the comprehensive list of API endpoints here https://shkeeper.io/api/

Tutorial video: https://www.youtube.com/watch?v=yYK_JAm1_hg

Find the knowledge base here: https://shkeeper.io/kb/launch/what-is-shkeeper

Latest announcements: https://shkeeper.io/news

<a name="available-coins"></a>

2. Available coins

SHKeeper offers a direct way to receive BTC, ETH, LTC, DOGE, XMR, XRP, TRX, BNB, SOL, MATIC, AVAX, FIRO, USDT (ERC20, TRC20, BEP-20, Polygon, Avalanche), USDC (ERC20, TRC20, BEP-20, Polygon, Avalanche).

<img width="2060" height="800" alt="Group 2614" src="https://github.com/user-attachments/assets/d44d5343-cd90-473f-a63f-dd1b1b74e8c5" />

<a name="features"></a>

3. Features

  1. Non-custodial
  2. Multi-currency
  3. No transaction fees & third parties
  4. Direct crypto payments
  5. Easily embed payment buttons / QR-code
  6. Ability to set your exchange rates, commissions, or fees
  7. Crediting the overpayment to the balance
  8. Partial payments
  9. Setting auto-payments into a cold wallet
  10. Increased privacy and security
  11. No KYC or AML
  12. Multipayout

image

<a name="installation"></a>

4. Installation

Install k3s and helm on a fresh server (tested on Ubuntu 22):

# curl -sfL https://get.k3s.io | sh -
# mkdir /root/.kube && ln -s /etc/rancher/k3s/k3s.yaml /root/.kube/config
# curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Create Shkeeper chart configuration file values.yaml with BTC, LTC, DOGE, XMR enabled:

# cat << EOF > values.yaml

#
# General
#

storageClassName: local-path

#
# BTC and forks
#

btc:
  enabled: true
ltc:
  enabled: true
doge:
  enabled: true

#
# Monero
#

monero:
  enabled: true
  fullnode:
    enabled: true
EOF

Install Shkepeer helm chart:

# helm repo add vsys-host https://vsys-host.github.io/helm-charts
# helm repo add mittwald https://helm.mittwald.de
# helm repo update
# helm install kubernetes-secret-generator mittwald/kubernetes-secret-generator
# helm install -f values.yaml shkeeper vsys-host/shkeeper

Login to Shkeeper: http://<ip>:5000/

Install auto SSL

Install cert-manager:

# helm repo add jetstack https://charts.jetstack.io
# helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.9.1 \
  --set installCRDs=true

Create CRDs, replace "demo.shkeeper.io" and "support@v-sys.org" with your own domain and email address:

cat << EOF > ssl.yaml
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: shkeeper-cert
  namespace: shkeeper
spec:
  commonName: demo.shkeeper.io
  secretName: shkeeper-cert
  dnsNames:
    - demo.shkeeper.io
  issuerRef:
    name: letsencrypt-production
    kind: ClusterIssuer
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-production
spec:
  acme:
    email: support@v-sys.org
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: your-own-very-secretive-key
    solvers:
      - http01:
          ingress:
            class: traefik
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: shkeeper
  namespace: shkeeper
spec:
  entryPoints:
    - web
    - websecure
  routes:
    - match: Host(`demo.shkeeper.io`)
      kind: Rule
      services:
        - name: shkeeper
          port: 5000
          namespace: shkeeper
  tls:
    secretName: shkeeper-cert
EOF

Apply CRDS:

# kubectl apply -f ssl.yaml

After a few minutes, your Shkeeper should be reachable on https://<your domain> and have a valid SSL.

Additional configuration for Bitcoin Lightning (advanced users only)

Enable autossl-enabled Ingress on port 9000 for LNURL:

cat << EOF > /var/lib/rancher/k3s/server/manifests/traefik-config.yaml
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    additionalArguments:
      - "--certificatesresolvers.default.acme.email=acme@shkeeper.io"
      - "--certificatesresolvers.default.acme.storage=/data/acme.json"
      - "--certificatesresolvers.default.acme.httpchallenge.entrypoint=web"
    ports:
      lnurl:
        port: 9000
        exposedPort: 9000
        expose:
          default: true
EOF

Port 9000 should be publicly available for LNURL to work.

Edit values.yaml to include domain: and external_ip: at the top level. The domain will be used for generating LNURL and external_ip is used for Lightning p2p communication.

#
# General
#

storageClassName: local-path
external_ip: 1.2.3.4
domain: my-shkeeper.example.com

...

<a name="developing"></a>

5. Developing

<a name="payment-flow"></a> Find the comprehensive list of endpoints here https://shkeeper.io/api/

5.1. Payment flow

The process of accepting payments through SHKeeper works as follows: Once you have installed SHKeeper and see active Wallets in the SHKeeper admin panel, you can start configuring your store to work with SHKeeper. SHKeeper operates on an invoice-based system, where each created invoice in SHKeeper corresponds to a unique address for the respective cryptocurrency. This allows you to identify the customer who made the payment.

Creating an invoice requires passing the X-Shkeeper-Api-Key in the header, and you also need to know the cryptocurrency name to form the endpoint for the request.

To begin, you need to obtain a list of cryptocurrencies available for invoice creation from SHKeeper (these are the ones that are online and not disabled in the admin panel).

<p align="center"> <img src="https://github.com/user-attachments/assets/66374540-21de-4cb1-a07f-0813600b743c" alt="image6"> </p>

To do this, use the endpoint /api/v1/crypto. This endpoint does not require authorization. The retrieved list can be displayed to the customer to choose the desired cryptocurrency for payment.

Next, create an invoice for the selected cryptocurrency using the endpoint /api/v1/{crypto_name}/payment_request. An invoice in SHKeeper should be created at the stage when you already know the unique order_id /invoice_id in your system, and only for the cryptocurrency chosen by the customer (do not create invoices for all cryptocurrencies received from SHKeeper immediately, as this will generate excess addresses that will not be used later). Invoices in SHKeeper are unique, one invoice will be created in the SHKeeper system for one external_id. The customer can change their mind and generate an address for another cryptocurrency; in this case, simply create an invoice for the new cryptocurrency as usual, and SHKeeper will automatically update the information in the already created invoice and provide you with a new payment address. If the customer pays to the previously generated address, SHKeeper will process the payment, and you will receive a notification (callback) about this payment, as SHKeeper saves all addresses generated by the customer. For each cryptocurrency, the customer receives a unique cryptocurrency address linked to their specific order_id (invoice_id). This address remains the same even if you send another request to SHKeeper to create the same invoice.

When creating an invoice in SHKeeper, provide a

Related Skills

View on GitHub
GitHub Stars540
CategoryDevelopment
Updated1h ago
Forks138

Languages

Python

Security Score

100/100

Audited on Mar 24, 2026

No findings