Judging from your question, I have a couple options to help and thoughts on what the potential issue is you are facing.
Option 1:
Use the 'get all' endpoint to get each and iterate through it page by page.
GET /asset/v1/content/assets
Host: {{subdomain}}.rest.marketingcloudapis.com
Content-Type: application/json
Authorization: Bearer {{auth_token}}
This will return a JSON array with all the content blocks in your BU. You then iterate through each object and grab the content
property (which one to grab varies depending on the asset type) from the object in the array to get the HTML. This will include ALL CB assets though, including emails, images, etc.
You can add a filter onto this via: $filter=assetType.name=htmlemail
or similar to narrow down the results. Which brings us to...
Option 2
You can use a filter (or advanced query endpoint) to filter it based on category ID to mimic what I am assuming you are attempting to do in your question.
GET /asset/v1/content/assets?$filter=category.id={{categoryID}}
Host: {{subdomain}}.rest.marketingcloudapis.com
Content-Type: application/json
Authorization: Bearer {{auth_token}}
This will return a JSON Array of assets that exist in that category ID. I mention this because I think the 1001663
you are mentioning that you got from /asset/v1/content/categories
is the categoryid (folder id) and not an assetId (id for an individual asset). Which is why it is tossing an error.
If you put an ID that is not a valid ID in to that endpoint, it will just send back an error code of 404 since it does not exist and therefore was not found.