async def METHOD_NAME(self, r):
    # normal for client, reverse for server
    request = await r.json()
    lightning_amount_sat = request['invoiceAmount']
    their_pubkey = bytes.fromhex(request['refundPublicKey'])
    assert len(their_pubkey) == 33
    swap = self.sm.create_reverse_swap(
        payment_hash=None,
        lightning_amount_sat=lightning_amount_sat,
        their_pubkey=their_pubkey
    )
    response = {
        "id": swap.payment_hash.hex(),
        'preimageHash': swap.payment_hash.hex(),
        "acceptZeroConf": False,
        "expectedAmount": swap.onchain_amount,
        "timeoutBlockHeight": swap.locktime,
        "address": swap.lockup_address,
        "redeemScript": swap.redeem_script.hex(),
    }
    return web.json_response(response)