Skip to main content

Notifications

Community site session details

Community site session details

Session Id :
Power Pages - Customize & Extend
Answered

webapi - create/associate - returning 400 bad request

(0) ShareShare
ReportReport
Posted on by 480

Hi all,

 

I'm trying to create and associate a contact with the portal webapi as per this page - https://learn.microsoft.com/en-us/power-pages/configure/write-update-delete-operations#basic-create

 

However it keeps returning a 400 bad request error. If I remove the association it works. I've triple checked my permissions. Are we not able to associate a contact to a custom table? Do I need to use a special relationship or not binding? I feel like I've tried every premutation, but nothing works.

 

 

 

function setValue(userId){

 var record = {};
 record["a1a_contact@odata.bind"] = "/contacts("+userId+")"; // Lookup
 record["a1a_name"] = userId; // Lookup

 webapi.safeAjax({
 type: "POST",
 contentType: "application/json",
 url: "/_api/a1a_login",
 data: JSON.stringify(record),
 success: function (data, textStatus, xhr) {
 var recordId = xhr.getResponseHeader("entityid");
 console.log(recordId);
 },
 error: function (xhr, textStatus, errorThrown) {
 console.log(xhr);
 }
 });
 
}

 

 

 

Categories:
  • Verified answer
    skoofy5 Profile Picture
    480 on at
    Re: webapi - create/associate - returning 400 bad request

    Right. So I checked the error message again. It was still a 400 bad request, but actually contained the following detail which I either hadn't noticed or it wasn't supplying:


    "Read Privilege Check For Owner failed with exception: Principal user..."

     

    Very strange, because it was a user Id - I have no idea why this random user is only impacting my contact. Turns out there was one other difference with the contact - it's owner was not 'System' as all the other contacts also the user was inactive, but not the contact record. Once I changed the owner of the contact record the webapi calls were successful.

    So my question now is - how is it that the owner of the contact record is impacting access to the webapi? Is this a documented thing? 

     

    skoofy5_0-1710470968386.png

  • skoofy5 Profile Picture
    480 on at
    Re: webapi - create/associate - returning 400 bad request

    Alright so a strange twist.  I've tested in a different browser and still no joy with this contact. So I had some colleagues test and it works for them. Their contact setup is identical to mine, except they have fewer web roles assigned to them (e.g. no Administrator).

     

    So I'm really confused at the moment as I thought it was cumulative access. In any case I've gone to align myself with those roles and still isn't working for my contact login. So I really don't understand.

  • GWham1 Profile Picture
    on at
    Re: webapi - create/associate - returning 400 bad request

    Hi, you could try the following. Couple things to check afterwards...

     

     

    function setValue(userId){
     var dataObject={
     "a1a_contact@odata.bind": "/contacts("+userId+")",
     "a1a_name": userId
     };
     webapi.safeAjax({
     type: "POST",
     url: "/_api/a1a_login",
     contentType: "application/json",
     data: JSON.stringify(dataObject),
     success: function (data, textStatus, xhr) {
     var recordId = xhr.getResponseHeader("entityid");
     console.log(recordId);
     }, error: function (xhr, textStatus, errorThrown) {
     console.log(xhr);
     }
     }); 
    }

     

    • The web API can be very particular about the names (as mentioned above) - so double check them.
    • Ensure you have table permissions created for your table a1a_login (as mentioned above)
    • Ensure you have created two Site Setting to enable your table/fields for web API.
    Webapi/a1a_login/enabled
    Webapi/a1a_login/fields

    https://learn.microsoft.com/en-us/power-pages/configure/webapi-how-to

  • Fubar Profile Picture
    7,955 Super User 2025 Season 1 on at
    Re: webapi - create/associate - returning 400 bad request
    • Double check the Set Name, as it should be plural and the code you provided it is not,
    • Make sure that your guid doesn't have braces {...}
    • Make sure that you have your table permissions setup and assigned to your portal user, and they include Append/Append To.
  • skoofy5 Profile Picture
    480 on at
    Re: webapi - create/associate - returning 400 bad request

    Yes - this is where I generated the code above.

  • Fubar Profile Picture
    7,955 Super User 2025 Season 1 on at
    Re: webapi - create/associate - returning 400 bad request

    I understand you are not creating a contact, that was just provided as an example.

    Use XrmToolBox's Dataverse REST Builder

    • File ->New Collection
    • Request Type: Create
    • Select your Table
    • Add Column - select your name field and populate a value)
    • Add Column - select your Contact Lookup field
    • Then for the lookup use the magnifying glass and select a value (this is only so when it generates it populates something and doesn't leave blank)
    • Click the Portals Tab - will generate the code for you
    • Copy the output and substitute in your GUID

    An example using Account with populating Primary Contact lookup

    Fubar_0-1710391824944.pngFubar_1-1710391847998.png

     

  • skoofy5 Profile Picture
    480 on at
    Re: webapi - create/associate - returning 400 bad request

    The table name must be correct as the record is created when I pass only the name, so it really must be the contact association that's the issue.

     record["a1a_contact@odata.bind"] = "/contacts("+userId+")";

     

    I'm not creating a contact - I'm creating a record and attempting to associate the contact of the logged in user.

  • Fubar Profile Picture
    7,955 Super User 2025 Season 1 on at
    Re: webapi - create/associate - returning 400 bad request

    First, I suspect the value in the url is incorrect, confirm the value is the dataset name 

    url: "/_api/a1a_login",

     e.g. if it were for creating a Contact the value used would be /_api/contacts

    You can copy the Dataset name when in the make.powerapps interface on the Table  

    Fubar_0-1710385612048.png

     If the url is correct then confirm what the "record" looks like after you JSON.stringify it and compare its structure to the sample JSON in the link in your post. (e.g. debug it in the browser before the safe ajax call)

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Michael Gernaey – Community Spotlight

We are honored to recognize Michael Gernaey as our June 2025 Community…

Congratulations to the May Top 10 Community Leaders!

These are the community rock stars!

Announcing the Engage with the Community forum!

This forum is your space to connect, share, and grow!

Leaderboard >

Featured topics