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).