Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.rebellapp.com/llms.txt

Use this file to discover all available pages before exploring further.

Message encoding prevents errors and ambiguity caused by special characters during transmission. Proper encoding ensures data integrity across all API communications.

Encoding Requirements

Byte Data (Signatures & Encrypted Content)

All binary data including signatures and encrypted content must be Base64 encoded before transmission. Method: Base64 encoding
// Encoding a signature
const signature = crypto.sign('RSA-SHA256', data, privateKey);
const encodedSignature = signature.toString('base64');

// For URL-safe contexts, use base64url
const base64UrlSignature = signature
  .toString('base64')
  .replace(/\+/g, '-')
  .replace(/\//g, '_')
  .replace(/=/g, '');
import base64

# Encoding a signature
signature = sign_data(data, private_key)
encoded_signature = base64.b64encode(signature).decode('utf-8')

# For URL-safe contexts
url_safe_signature = base64.urlsafe_b64encode(signature).decode('utf-8').rstrip('=')

HTTPS URL Data

URLs must be percent-encoded before transmission to handle special characters correctly. Method: URL encoding (percent-encoding)
OriginalEncoded
https://www.merchant.com/callback?order=123https%3A%2F%2Fwww.merchant.com%2Fcallback%3Forder%3D123
https://example.com/path with spaceshttps%3A%2F%2Fexample.com%2Fpath%20with%20spaces
// URL encoding
const callbackUrl = 'https://www.merchant.com/authorizationResult';
const encodedUrl = encodeURIComponent(callbackUrl);
// Result: https%3A%2F%2Fwww.merchant.com%2FauthorizationResult
from urllib.parse import quote

callback_url = 'https://www.merchant.com/authorizationResult'
encoded_url = quote(callback_url, safe='')
# Result: https%3A%2F%2Fwww.merchant.com%2FauthorizationResult

Character Sets

Request Body

  • Encoding: UTF-8
  • Content-Type: application/json; charset=UTF-8
All JSON request bodies should be UTF-8 encoded. Special characters in string values are automatically handled by JSON serialization.
const requestBody = {
  orderDescription: "Café latté × 2", // UTF-8 characters
  extendInfo: JSON.stringify({ note: "特殊字符" })
};

// Send with proper content-type
fetch(url, {
  headers: { 'Content-Type': 'application/json; charset=UTF-8' },
  body: JSON.stringify(requestBody)
});

Signature Calculation

When calculating signatures, the content to be signed must be properly encoded:
1

Construct String

Build the string to sign from HTTP method, URI, headers, and body
2

Encode to Bytes

Convert the string to UTF-8 bytes
3

Sign

Apply RSA-SHA256 signature algorithm
4

Base64 Encode

Encode the binary signature as Base64
// Complete signature flow
const contentToSign = [
  'POST',
  '/v1/payments/pay',
  clientId,
  requestTime,
  JSON.stringify(body)
].join('\n');

// Convert to bytes (UTF-8)
const bytes = Buffer.from(contentToSign, 'utf-8');

// Sign
const signer = crypto.createSign('RSA-SHA256');
signer.update(bytes);
const signature = signer.sign(privateKey);

// Base64 encode
const encodedSignature = signature.toString('base64');

Common Encoding Scenarios

Data TypeEncoding MethodExample Use Case
SignatureBase64Signature header value
Encrypted dataBase64Sensitive field encryption
Callback URLsURL encodingpaymentNotifyUrl parameter
JSON bodyUTF-8Request body transmission
Extended infoJSON stringextendInfo field

Best Practices

Double Encoding: Be careful not to encode data twice. If you URL-encode a value and then include it in a JSON body that gets URL-encoded again, you’ll have double-encoded data that won’t decode correctly.