Impossible to create a record - "Could not find field \"fields\" in the request body"


#1

Hello everybody,

I’m trying to use Airtable API for the first time with my arduino Yun and I encontered a problem with creating record.
When I use my program, I get the following error : "error":{“type”:“INVALID_REQUEST_MISSING_FIELDS”,“message”:“Could not find field “fields” in the request body”}}.`
I think it’s just a formatting problem but I can’t find where and I did find anything helpful on the internet (which make me think my problem is very idiot :blush: )

What can I do ? Thanks in advance !


#2

You have not added the “fields” attribute to the body of your request.

Also the “body” parameter is expecting a JSON object.
Your curl request should look like

-d ‘{
“fields”: {
“gender”: “male”
}
}’

It can be adapted for any language though…


#3

For more details, here is my code. The “GetEvent” function works great :slight_smile:
#include <ArduinoJson.h>
#include <Process.h>
int Creer = 0;
String ApiKey = “XXX”;

void GetEvent(String IdEvent) {

Serial.println("-----");
Serial.println("‘GetEvent’ démarré");
Process r; // Create a process and call it ‘r’
r.begin(“curl”);
r.addParameter("-v");
//r.addParameter("-I");
r.addParameter(“https://api.airtable.com/v0/appfqkj7sz4JgkmZJ/Evenement/” + IdEvent + “?api_key=” + ApiKey);
r.run();
// A process output can be read with the stream methods
while (r.available() > 0) {
char c = r.read();
Serial.print©;
}
Serial.println("‘LireEvent’ - rtour reçu");
//Ensure the last bit of data is sent.
Serial.flush();
delay(5000);
}

void CreateEvent(String NomEvnt, String TypeEvnt, int MesureHumidite)
{
Serial.println("-----");
Serial.println("‘CreateEvent’ démarré");
Process q;
q.begin(“curl”);
q.addParameter("-XPOST");
q.addParameter(“https://api.airtable.com/v0/appfqkj7sz4JgkmZJ/Evenement?api_key=” + ApiKey);
q.addParameter("-v");
q.addParameter(“Content-Type: application/json”);
q.addParameter("-d");
JsonEvenement = “{“fields”:{“Name”:”";
JsonEvenement += NomEvnt;
JsonEvenement += “”,“Type événement”:"";
JsonEvenement += TypeEvnt;
JsonEvenement += “”,“Mesure - humidité”:";
JsonEvenement += MesureHumidite;
JsonEvenement += “,“Pot”:”;
JsonEvenement += “[“recJiYcOz0lS8vOsN”]”;
JsonEvenement += “,“Sonde - Mesure”:”;
JsonEvenement += “[“rectLngEvcaZA9CR3”]”;
JsonEvenement += “,“Date / Heure”:”";
JsonEvenement += “2017-05-08T10:19:00.000Z”;
JsonEvenement += “”}";
//JsonEvenement += ““typecast”:”";
//JsonEvenement += “true”;
//JsonEvenement += “}’”;
q.addParameter(JsonEvenement);
Serial.println(JsonEvenement);
Serial.println();
q.run();
while (q.available() > 0) {

char d = q.read();
Serial.print(d);
}
Serial.println("‘CreateEvent’ - retour reçu");
//Ensure the last bit of data is sent.
Serial.flush();
delay(5000);
}

void setup() {
// Initialize Bridge
Bridge.begin();

// Initialize Serial
Serial.begin(9600);

// Wait until a Serial Monitor is connected.
while (!Serial);

// run various example processes
//runCurl();
CreateEvent(“Test646464”, “Mesure - Trop sec”, 140);
GetEvent(“recJZJ2TUM5huXBVq”);
}

void loop() {
// Do nothing here.
}


#4

Hi everyone,
I have the similar problem, but I could not seem to figure it out. I am not using curl but I am using the npm airtable package with node.js.

Below is the error code I get from console.

Error: Request failed with status code 422
at createError (createError.js:17)
at settle (settle.js:19)
at XMLHttpRequest.handleLoad (xhr.js:78)

Airtable error: {“error”:{“type”:“INVALID_REQUEST_MISSING_FIELDS”,“message”:“Could not find field “fields” in the request body”}}

Here is my code.

Could somebody please explain me the error of my code? Thanks a lot!

var Airtable = require('airtable');
Airtable.configure({
    endpointUrl: 'https://api.airtable.com',
    apiKey: '####'
});
var base = Airtable.base('#####');
const axios = require('axios');
var airtable_write_endpoint = "https://api.airtable.com/v0/####v/Table%201?api_key=####";
var form = document.querySelector("#bize-ulasin");

axios.post(airtable_write_endpoint, {
         "fields": {
            "AdSoyad": document.getElementById("#Ad-Soyad"),
            "Email": document.getElementById("#Email"),
            "Telefon": document.getElementById("#Telefon"),
            "Konu": document.getElementById("#Konu"),
            "Mesaj": document.getElementById("#Mesaj"),
            "Ortam": "Websitesi"
        }
    })
    .then(function(response) {
    console.log(response);
        })
        .catch(function(error) {
        console.log(error);
    });

<form action="https://api.airtable.com/v0/####/Table%201?api_key=####" id="bize-ulasin" method="POST">
                  <div className="form-group row">
                          <input type="text" name="AdSoyad" className="form-control" placeholder="Ad-Soyad*" id="Ad-Soyad" required/>  </div> 
div className="form-group row">

                      <input type="email" name="Email" className="form-control" placeholder="E-mail*" id="Email"
                             
                             required/>

              </div>
              <div className="form-group row">

                  <input type="number" name="Telefon" className="form-control" placeholder="Telefon*" id="Telefon"
                         required/>

              </div>
                  <div className="form-group row">
                      <label placeholder="Konu*"></label>

                      <select className="form-control" name="Konu" placeholder="" id="Konu">
                          <option>Soru</option>
                          <option>Öneri</option>
                          <option>Şikayet</option>
                      </select>

                  </div>
              <div className="form-group row">

                      <textarea className="form-control" name="Mesaj" id="Mesaj" rows="3" placeholder="Mesaj"
                        required/>

              </div>
              <div className="form-group row">
                  <div className=" text-center">
                      <button type="submit" className="btn doggo-btn-scd doggo-color-main-bg">GÖNDER</button>
                  </div>
              </div>
          </form>