Model
The Model type can indeed be used to display data from a custom model object - if you can fill that object with your API data that is certainly an option. I wrote a small article on this a few years ago: https://ggullentops.blogspot.com/2019/03/external-model-data-SXA-variant-Sitecore.html
Suppose the model of your component looks a bit like this:
public class CustomModel: VariantsRenderingModel { public string CustomProperty { get; set; } public CustomClass CustomClassProperty { get; set; } }
then you can use the properties with a Model variant like this:
or 
Make sure the properties are filled of course.
Scriban
Depending on your SXA version, Scriban could also be an option. In a Scriban template you can also use o_model to access object data just as the model type. But if it gets a bit more complicated you could also create your own Scriban extension - which is actually not that hard to do (https://ggullentops.blogspot.com/2019/11/custom-sxa-scriban-extensions.html).
You would need a context function - something like this:
using Scriban.Runtime; using Sitecore.XA.Foundation.Abstractions; using Sitecore.XA.Foundation.Scriban.Pipelines.GenerateScribanContext; public class ScribanApiData : IGenerateScribanContextProcessor { private readonly IContext context; public ScribanApiData(IContext context) { this.context = context; } public void Process(GenerateScribanContextPipelineArgs args) { var apiData = new ApiData(GetApiData); args.GlobalScriptObject.Import("sc_apidata", (Delegate)apiData); } public string GetApiData(string key) { //return your api data; } private delegate string ApiData(string key); }
Configure it like this:
<sitecore> <pipelines> <generateScribanContext> <processor type="Sxa93.ScribanApiData, Sxa93" resolve="true" /> </generateScribanContext> </pipelines> </sitecore>
and use it like {{ sc_apidata "Key" }}.
In this example a "key" is passed to the class fetching the api. That can be extended or skipped if needed.
You can also return all kinds of data - if you need to return a custom object though it becomes a bit more difficult (that might be another topic).