Skip to main content

What is Message Level Encryption?

Message Level Encryption (MLE) provides end-to-end encryption for sensitive data transmitted between your application and Method’s API. Using a hybrid encryption approach, MLE ensures your data remains protected even if network traffic is intercepted. MLE uses two layers of encryption:
  • Symmetric encryption (AES-GCM) encrypts your actual data payload using a Content Encryption Key (CEK)
  • Asymmetric encryption (RSA-OAEP-256) encrypts the CEK using Method’s public key
This approach combines the efficiency of symmetric encryption with the security of public-key cryptography.

Prerequisites

To use MLE with Method’s API, you’ll need:
  • An RSA key pair for RSA-OAEP-256
  • Ability to create and parse JWE (JSON Web Encryption) in compact serialization format
MLE requests require:
  • Header: Method-MLE: jwe
  • Content-Type: application/json
  • Request body: {"encrypted": "<compact dot separated JWE string>"}

Setup Guide

Step 1: Generate Your RSA Key Pair

Generate an RSA key pair that will be used to receive encrypted responses from Method.

Step 2: Register Your Public Key with Method

You can register your public key using either a well-known endpoint (recommended) or direct registration.
Important: Each key ID (kid) can only be registered once using either method. If you have a public key available through your well-known endpoint, you should not register the same public key through direct registration, even if you change the kid.
Host your public JWK at a well-known URL and register it with Method:
Your well-known endpoint should return:

Requirements for keys on .well-known endpoint

  1. Must have a top-level field named keys that has a list as its value.
  2. For a JWK (an item in list of keys) to be valid the following must be met:
    1. JWK must be an object
    2. JWK must have a field named kty and it must be equal to RSA
    3. JWK must have a field n and it must be a string that is valid n for a JWK in accordance to the RFC
    4. JWK must have a field e and it must be a string that is valid e for a JWK in accordance to the RFC
    5. JWK can optionally have a field named alg but if it is provided the value must be RSA-OAEP-256
    6. JWK must have a field kid and it must be a string that is a valid id which will be passed as cid when making requests to Method

Option B: Direct Registration

Alternatively, register your public key directly:

Step 3: Retrieve Method’s Public Key

Fetch Method’s public key for encrypting your requests:
Method’s public keys are environment-specific:
  • Production: https://production.methodfi.com/.well-known/jwks.json
  • Sandbox: https://sandbox.methodfi.com/.well-known/jwks.json
  • Development: https://dev.methodfi.com/.well-known/jwks.json

Making Encrypted Requests

Step 1: Encrypt Your Request Payload

Step 2: Send the Encrypted Request

Step 3: Decrypt the Response

Complete Example

Here’s a complete example showing the full MLE flow:

Error Handling

When using MLE, you may encounter these specific error codes:

Performance Considerations

  • MLE requests have increased latency due to encryption/decryption operations
  • Consider implementing request timeouts appropriately
  • Cache Method’s public keys (respect the Cache-Control header)

Key Lifecycle and Management

Method’s Key Status

Method’s public keys have two possible statuses:
  • Active: Current keys that should be used for encryption
  • Deprecated: Keys that are being phased out and will be disabled in 90 days
Always use keys with status: "active" when fetching Method’s public keys. Deprecated keys remain functional for 90 days before being completely disabled.

Your Key Management

When you successfully register a key with Method, you’ll receive a response like this:

MLE Public Keys API

For complete CRUD operations on your MLE public keys, see the dedicated API documentation:

Quick Key Deletion Example

You can delete your registered keys using the id returned when you created the key:

Key Rotation Best Practices

  • Method recommends rotating your keys every 90 days
  • Always check for keys with status: "active" when fetching Method’s keys
  • Plan your key rotation to avoid service interruptions

Webhook Notifications

You can subscribe to webhook events to be notified when Method’s public keys change: These webhooks help you stay informed about Method’s key lifecycle changes, allowing you to:
  • Automatically fetch new active keys when they’re created
  • Update your cached keys when Method rotates or deprecates keys
  • Implement proactive key management in your application
When a webhook is triggered, the event payload includes a path field pointing to the specific key that changed. You can use this path to retrieve the updated key information via the Retrieve Method Public Key endpoint. Example webhook event:
To subscribe to these events, create a webhook using the Webhooks API with the desired event type.

Fallback Strategy

If MLE is temporarily unavailable (indicated by MLE_DECRYPTION_FAILED or MLE_ENCRYPTION_FAILED errors), you can fall back to standard non-encrypted requests by:
  1. Remove the Method-MLE: jwe header
  2. Send your payload directly (not wrapped in encrypted)
  3. Process the plain response normally
This ensures your integration remains functional even during MLE service interruptions.