We have a migration project where we need to migrate content from AEM to SFMC. I know api is one way of doing it. Is there any other approach?
With CMS integration there are two ways to think about this:
Push: This is the scenario you mentioned specifically using the Content Builder API. Given the desire for the assets to physically reside in SFMC and the eventual decommissioning of AEM, I would recommend this approach.
You may be able to shortcut some of the dev work using the Platform SDKs which are wrappers around the API for a variety of languages.
If you're a postman user and would like a short cut to a library with the Content Builder APIs outlined with examples check out the SFMC Github Postman Repo now supporting Postman Public Workspaces.
This scenario should be outlined to cover all possibilities though given your comments on the future of AEM I don't believe it's the best approach for your situation.
The Content Builder SDK provides a way to integrate SFMC with external systems by extending the interface to create your own blocks. A great example of this would be integration with a CMS such as AEM. In this scenario the marketing user is able to use the custom block to "reach" into AEM to browse the assets. What the block does is up to you. You could have the block import the asset into SFMC or simply place an href in the content the marketer is using. If you're interested in learning more and seeing this in action there is a Trailhead Live on Extend Content Builder with the Content Builder Block SDK where we walk through the build of a block.