Sending and recieveing a file(audio) from app to elixir api issue

Hey I am trying to send an audio recording from my react-native android app the request looks like this:

let data = new FormData();
        data.append("recording", {
          uri: rec._fsPath,
          type: "audio/mp4",
          name: "testRec",
          challenge_id: 1,
          user_id: 1,
          mod_score: 3
            config.API_URL + "recordings",
            { data },
            { headers: { Authorization: "Bearer " + this.props.auth.token } }
          .then(res =>;

the params when arrive they look like this:

This typically happens when there is aparameter mismatch but may also happen when any of the other action arguments do not match. The request parameters are:
%{"data" => %{"_parts" => [["recording", %{"challenge_id" => 1, "mod_score" => 3, "name" => "testR ec", "type" => "audio/mp4", "uri" => "/data/user/0/com.cobrn/files/filename.mp4", "user_id" => 1}]]} }

and my api is expecting recording_params that goes here:

with {:ok, %Recording{} = recording} <- Web.create_recording(recording_params)

that goes here:

def create_recording(attrs \\ %{}) do

    |> Recording.changeset(attrs)
    |> Repo.insert()

that goes to my schema that looks like this:

defmodule Userteam1.Web.Recording do
  use Ecto.Schema
  use Arc.Ecto.Schema
  import Ecto.Changeset

  schema "recordings" do
field(:path_to_recording, Userteam1Web.Recording.Type)
field(:mod_score, :integer)
belongs_to(:user, Userteam1.Web.User)
belongs_to(:challenge, Userteam1.Web.Challenge)
has_many(:comment, Userteam1.Web.Comment)


  @doc false
  def changeset(recording, attrs) do
|> cast(attrs, [:challenge_id, :user_id, :mod_score])
|> cast_attachments(attrs, [:path_to_recording])
|> validate_required([:path_to_recording])

as you can see it should cast the attachment, as the documentation and examples showed for ARC and ARC-ecto but either the request is wrong in some form, or is it not attached, does append do what attach wants to take?
I know that this might be a lot to read, but I would really appreciate some help with this issue, and I think this could be good resource for other devs too in the future.

ok I see the traction is big, I found that I might need to do something along these lines:
that I thake the params and remap them, but the question then is how will it be a plug.upload struct?

Although the thing is that the request send in such a way that it oesnt even go to the create path, since it doesnt match, why though?

i had the place of the file before just as a string and the creation worked with this data sent from postman:

{	"recording":{
	"path_to_recording": "5x",
	"challenge_id": 1,
	"user_id": 1,
	"mod_score": 4

but if i send thi now it wont work obviously, and say this:

    "errors": {
        "path_to_recording": [
            "can't be blank"