DELETE
https://jmpy.me/api/v1
/
qr-codes
/
{id}
Delete QR Code
curl --request DELETE \
  --url https://jmpy.me/api/v1/qr-codes/{id} \
  --header 'Authorization: Bearer <token>'
{
  "success": true,
  "data": {
    "message": "<string>"
  }
}
Permanently delete a QR code and remove its tracking data.
This action cannot be undone.
  • The QR code will stop functioning immediately
  • All scan analytics data will be retained for historical purposes
  • If the QR code has an associated short URL, the URL will continue to work but won’t be linked to this QR code

Path Parameters

id
string
required
The UUID of the QR code to delete.
Temporary QR codes (IDs starting with temp-) cannot be deleted as they are not persisted.

Response

success
boolean
Whether the request was successful.
data
object
Response containing deletion confirmation.

Request Examples

curl -X DELETE "https://jmpy.me/api/v1/qr-codes/770e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Examples

{
  "success": true,
  "data": {
    "message": "QR code deleted successfully"
  }
}

Use Cases

Implement a safe delete with user confirmation.
async function deleteQRCodeWithConfirmation(qrCodeId, confirm = false) {
  if (!confirm) {
    // First, get the QR code details
    const detailsResponse = await fetch(
      `https://jmpy.me/api/v1/qr-codes/${qrCodeId}`,
      { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
    );
    const details = await detailsResponse.json();
    
    if (details.success) {
      const qr = details.data.qrCode;
      console.log(`About to delete: "${qr.name}"`);
      console.log(`  - Total scans: ${qr.scan_count}`);
      console.log(`  - Created: ${qr.created_at}`);
      console.log('Call with confirm=true to proceed.');
      return { confirmed: false, qrCode: qr };
    }
  }

  // Proceed with deletion
  const response = await fetch(
    `https://jmpy.me/api/v1/qr-codes/${qrCodeId}`,
    {
      method: 'DELETE',
      headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
    }
  );

  return await response.json();
}
Delete all expired QR codes from your account.
import requests
from datetime import datetime

def delete_expired_qr_codes():
    # First, get all QR codes
    response = requests.get(
        'https://jmpy.me/api/v1/qr-codes?limit=100',
        headers={'Authorization': 'Bearer YOUR_API_KEY'}
    )
    
    data = response.json()
    now = datetime.now()
    deleted_count = 0
    
    for qr in data['data']['qrCodes']:
        if qr.get('expires_at'):
            expires = datetime.fromisoformat(qr['expires_at'].replace('Z', '+00:00'))
            if expires < now.astimezone():
                # Delete expired QR code
                delete_response = requests.delete(
                    f"https://jmpy.me/api/v1/qr-codes/{qr['id']}",
                    headers={'Authorization': 'Bearer YOUR_API_KEY'}
                )
                if delete_response.json()['success']:
                    print(f"Deleted expired: {qr['name']}")
                    deleted_count += 1
    
    print(f"Deleted {deleted_count} expired QR codes")

delete_expired_qr_codes()
Export QR code data before deletion for records.
async function archiveAndDeleteQRCode(qrCodeId) {
  // Get full QR code details
  const detailsResponse = await fetch(
    `https://jmpy.me/api/v1/qr-codes/${qrCodeId}`,
    { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
  );
  const details = await detailsResponse.json();

  if (!details.success) {
    throw new Error(details.error.message);
  }

  // Archive the data (e.g., save to file or database)
  const archive = {
    deletedAt: new Date().toISOString(),
    qrCode: details.data.qrCode
  };
  
  // Save archive (example: to localStorage, file, or database)
  console.log('Archived:', JSON.stringify(archive, null, 2));

  // Delete the QR code
  const deleteResponse = await fetch(
    `https://jmpy.me/api/v1/qr-codes/${qrCodeId}`,
    {
      method: 'DELETE',
      headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
    }
  );

  return await deleteResponse.json();
}