Skip to content
Kamka IT

The notification relay

For a message from your ERP to reach your phone, it has to go through Apple or Google. Our relay makes the link. The message travels encrypted for your phone alone: a sealed envelope that neither the relay, nor Apple, nor Google can open.

  1. 01

    Your phone

    Creates a key pair for each company. The private key never leaves it; it gives the public key to your ERP.

    The only one with the key
  2. 02

    Your company's ERP

    Encrypts the message for your phone, with its public key, then signs the request.

    The message is its own
  3. 03

    Our relay

    Checks that the request really comes from your ERP, then passes the envelope on as it is.

    A sealed envelope
  4. 04

    Apple or Google

    Deliver the envelope to your phone, as they do for every app.

    A sealed envelope
  5. 05

    Your phone

    Opens the envelope with its private key and shows the message.

    The only one to read it

Who sees what

The relay is hosted by Kamka IT on a server rented from OVHcloud in Gravelines (France), at push.kamdoo.app. Its code is public: kamka-ai/kamdoo-relais.

WhoSeesDoes not seeKeeps
Our relay Your phone's notification identifier (for the time of one delivery), a 16-character label that tells the phone which key to use, the IP address of the sending server (and the phone's when it registers), the time and the size of the envelope. The text of the message, its sender, the record it is about, your name. Nothing: no database, no file (details just below).
Apple or Google Your phone's identifier, the encrypted envelope, the label, the time. On iPhone, the only plain text is “Kamdoo” and “…”, replaced on the phone by the real message. The text of the message, its sender, your ERP. The envelope for at most one hour if your phone is off, then it is dropped. Under their own rules.
Your company's ERP The message, since it is its own, your phone's public key and the delivery address given by the relay. The phone's private key, nor its Apple or Google identifier: it is sealed inside the delivery address. The delivery address and the public key, while the phone is registered. They are governed by your company.
Kamka IT Apart from the relay, nothing: the app sends nothing else to Kamka IT, no statistics, no reports. Your messages, your records, your login details, your ERP's address. Nothing.

What the relay keeps, exactly

The relay has no database. It holds only what is strictly needed, in memory, and forgets it straight away.

  • No database

    Nothing is written to disk: not your phone, not your messages, not your company.

  • At your ERP

    Your phone's notification identifier is not stored by us: it is sealed (encrypted with a key only the relay knows) inside the delivery address. Your ERP keeps that address; the relay opens it for the time of one delivery, then forgets it.

  • 10 minutes at most

    A message too long to fit in a notification waits in memory for your phone to fetch it. It is handed over once, then erased; if nobody asks for it, it is erased after 10 minutes.

  • 2 minutes at most

    The IP address of whoever calls the relay is counted in memory to block abuse (too many requests per minute), then erased. It is never written down.

  • No logs

    The relay only writes when it starts and, if Google refuses a delivery, the error code. Never an identifier, an address or any content. The server hosting it does not log the relay's requests.

For engineers: standards and details
  • The code is public, under the LGPL-3 licence: the relay at github.com/kamka-ai/kamdoo-relais, the kamdoo_connect Odoo module at github.com/kamka-ai/kamdoo-odoo. Anyone can check what this page says.
  • End-to-end encryption following the Web Push standard used by browsers: RFC 8030, RFC 8291 (ECDH key agreement on the P-256 curve, HKDF-SHA-256 derivation, AES-128-GCM encryption, aes128gcm encoding) and RFC 8292 (VAPID signature, ES256).
  • The phone's keys (P-256 private key and authentication secret) are stored in the iOS keychain, shared only with Kamdoo's notification extension, and in Android's encrypted storage.
  • Odoo 17 to 20 encrypts and signs on its own (native Web Push). On Odoo 14, 15 and 16, the free kamdoo_connect module, installed on the ERP, adds the same process.
  • The delivery address contains, sealed with AES-256-GCM under a key only the relay knows: the platform, the phone's Apple or Google identifier, a fingerprint of the ERP's signing key and the label. The relay refuses any request whose VAPID signature does not match that fingerprint: only the ERP your phone registered with can write to it.
  • The label is a fingerprint (SHA-256) of the ERP's address, the database and your user number: it contains none of the three.
  • Apple (APNs) receives a notification with neutral, mutable content: Kamdoo's extension decrypts it on the iPhone before it is shown. Google (FCM) receives a data-only message, decrypted by the app on the phone. Validity: one hour.
  • App uninstalled: Apple or Google report it, the relay answers 410 to the ERP, which forgets the device.

To stop notifications: Settings › Notifications in Kamdoo, or your phone's settings. Removing a company unregisters the phone from its ERP and erases its key. The morning reminder (your activities for the day) is prepared on the phone itself, without any server.