We're thrilled to see all the great development going on with the NationBuilder API, and want to open this forum up for public feedback, helps and hints, questions and more. This resource is curated by the NationBuilder API Team - our goal is developers helping developers, so we definitely want to hear from you. You can also use the tags to rank posts. Thanks!
install application
It seems a silly question to ask, but I do not quite understand how works your applications directory. I am looking at the directory and when I click on "Get started now" it just redirect to some web site. I thought it should start some sort of a dialog to generate an authorization request.
API Authentication STEP 3 ambiguity
3. Record the code that comes back
We will redirect him/her to your redirect_uri with a code parameter in its query string, so a request will come through like this:
GET http://www.myapp.com/oauth_callback?code=...
There is a minor problem/inconvenience with that process. When client clicked on the authorization url and you redirected a request to the application callback with the code, there is no information who authorized that.
This is probably OK for entirely manual registration, however it would be really helpful to attach a client slag '{slug}.nationbuilder.com' which I generated the Authorization request for:
GET http://www.myapp.com/oauth_callback?code=...&client={slug}.nationbuilder.com
create a person returns 302
Hello,
I am trying to create a new person via POST /api/v1/people and getting back 302 response without any other info.
This is the request body:
{"person": { "first_name": "New", "last_name": "Person1", "phone": "1613111222", "email": "[email protected]" } }
Please help!
Response Codes
Where is there a list of all the Response Codes?
Building a custom form with multiple tagging sections
I’m trying to build a custom form that will have multiple sections, that will tag people with their response. I can get the html displaying the way I want it to, and submit the form with the “text_fields”, but when it comes down to tagging people…. I’m lost!
code example,
{% form_for signup %}
{% hidden_field_tag "page_id", page.id %}
Can you verify your information?
- {% text_field "name", class:"text", placeholder: "name" %}
- {% text_field "email", class:"text", placeholder: "email" %}
- {% text_field "submitted_address", class:"text" %}
i am A...
Check one that applies
Democrat
Do Not Identify
What issues matter most to you
Check one that applies
National Security
Israel
Securing the Border
Issue 4
Issue 5
Issue 6
how often would you like to receive updates?
Check one that applies
Daily
Weekly
Infrequently
{% submit_tag "Signup", class:"submit-button" %}
{% endform_for %}
Any help of feedback would be AWESOME! Even a place to reference some samples.
Thanks !
Testing how to post here
This is the test )
ID for People Tags
Is there a way to get the ID for a people tag? So that when I rename a tag, I do not need to update the tag-people relationship. Thanks.
Exports API for a Nation
There is an Exports API for a specific list. (POST /api/v1/lists/:list_id/exports). Is there an API to export all people from a nation?
500 Error with PHP OAuth
I'm having an odd problem with the API. I wrote a script which was working fine in early August, but when I returned to using it I now get a 500 error when generating a token. If I make a new app, it will generate a token fine once but any repeated executions will return a 500. I haven't changed anything, and it was worked fine before. Help?
NB doesn't seem to have a good way to post code, but here's the blog post I wrote a few weeks ago with my code: http://www.richiroutreach.com/blog/working-php-and-nationbuilder-api
// OAuth 2 Library require_once ROOT . '/OAuth2/Client.php'; require_once ROOT . '/OAuth2/GrantType/IGrantType.php'; require_once ROOT . '/OAuth2/GrantType/AuthorizationCode.php'; // Client ID and Secret from Nation Builder const CLIENT_ID = 'id'; const CLIENT_SECRET = 'secret'; // Constants we need to talk to Nation Builder const REDIRECT_URI = "http://example.com/create_user.php"; const AUTHORIZATION_ENDPOINT = "https://xxx.nationbuilder.com/oauth/authorize"; const TOKEN_ENDPOINT = "https://xxx.nationbuilder.com/oauth/token"; const REQUEST_ENDPOINT = "https://xxx.nationbuilder.com/api/v1"; // Start a new OAuth2 Client $client = new OAuth2\Client(CLIENT_ID, CLIENT_SECRET); // Check if we have an authorize code, if not obtain one if (!isset($_GET['code'])) { // Generate the URL we need to go to get the token $auth_url = $client->getAuthenticationUrl(AUTHORIZATION_ENDPOINT, REDIRECT_URI); // Redirect to that URL (which then sends us back to the REDIRECT_URI with a code, IE this page) header('Location: ' . $auth_url); // End this process die('Redirect'); } // We have a code, so generate the parameters we need to get an access token $params = array('code' => $_GET['code'], 'redirect_uri' => REDIRECT_URI); // Obtain our access token $response = $client->getAccessToken(TOKEN_ENDPOINT, 'authorization_code', $params);
description for the last_call_id does not make sense
-
last_call_id
- the time and date of the last call to this person
Is that correct description? Looking at other field it should be 'last_call_at'.
cannot update neither contact_method_id nor call_status_id
Hello,
We are posting those fields as following, but when read back the call_status_id field does not exist or empty and contact_status_id shows the old value.
"call_status_id": "4",
"contact_status_id": "3"
updated_at and contacted_at issues and etc.
Hello,
We are posting update as following, however do not see the note's time-stamp as posted. The note time always says "5 days ago". Also we do not see 'contacted_by' on the page.
{
"person": {
"updated_at": "2014-08-26T14:57:16-04:00",
"last_contacted_at":"2014-08-26T14:49:27-04:00",
"last_contacted_by ": { "id": "XXX" } ,
"note_updated_at": "2014-08-26T14:49:27-04:00" ,
"note": "Hello again!"
}
}
How to set 'last_contacted_by'
We are trying to set this field on update. We set id to an existing person is, however do not see this was reflected on the updated person page.
"last_contacted_by ": { "id": "XXX" }
Also,
Issue with PUT'ing to people via API with PHP
Hi,
We're using the NB people API with PHP and the adoy/oauth2 library. Recently, whenever our site makes a PUT to /api/v1/people/push, we seem to be receiving a code 400 error with no message attached.
Code:
$payload = array(
'person' => array(
'first_name' => $first_name,
'last_name' => $last_name,
'email' => $email,
'note' => 'Sign up from web form at ' . DB::now(),
'email_opt_in' => true
)
);
$api_url = $baseApiUrl . '/api/v1/people/push';
$response = $client->fetch($api_url, $payload, 'PUT', array('Content-type' => 'application/json', 'Accept' => 'application/json'));
The response comes through like this:
(
[result] =>
[code] => 400
[content_type] => text/plain; charset=utf-8
)
Can anyone point me in the direction of what isn't right here?
Thanks,
Sam
How update Call/Data Entry view fields for LIsts via API
Hello,
I am trying to figure out how to update via API the Data Entry and Call view fields for a List.
Also what are corresponding fields in the people API?
Thanks.
Reports dashboard with number count of prospects in a filter?
I'm interested in creating a status page with a live count of the number of people in a given filter.
For example: Team A is responsible for getting prospects from a specific area to join a nation. A filter is created that shows 'joiners' from that specific area.
I want to create a page that then shows (live) the number of supporters in a specific filter. I would then be able to show this for multiple teams to compare/contrast their progress.
In the API Explorer I saw there's something for lists (which aren't dynamic) but not filters...
Can this be done?Thanks for any help with this.
Validation Error when Setting Membership Expiration Date to NULL
I'm attempting to use the new Membership API to update membership records. We have a class of members whose memberships do not expire, but whose membership records were erroneously given an expiration date.
When I use the API to update the membership expiration date to NULL, I throw a validation error.
PUT /people/:person_id/memberships
{
"membership" : {
"name" : "Standard"
, "status" : "active"
, "expires_on" : null
}
}
Any thoughts on how to fix? I'm considering just setting the expiration date 100 years in the future, but that could upset queries for members without expiration dates.
Can't create a new contact; getting validation error
People Credentials
I mean, is it possible that people from my nation logs in my app with their nationbuilder credentials (user and password)?
POST/PUT endpoints do not work.
I'm using the NB api via PHP. The GET/DELETE methods both work but no matter what I try I can not edit or add a new people resource using the client->fetch() function.
The error code is always a 400 no matter how I format the parameters. Please help and don't give me a canned response to the API helper because I've spent 3.5 hours already trying various things in the documentation which is thin to say the least.
App Integration Leading Practices?
I'll frame this question in a general way so it applies to other 3rd party app developers, not just me:
What level of API integration are NB customers asking for?
For example, if you build a third-party app that can help members of a nation interact with each other (i.e. group chat or something else), there are several ways I can imagine that you'd want to integrate it with NB, each with a different level of complexity:
- No integration: Just listing an app in the app directory, essentially as an ad for the app-- probably not an option.
- Minimal integration: Include the app in an iframe and have either no sign-in requirement or require that the members of the nation sign in a second time within the app's iframe as part of the app's authentication process.
- Deep integration: Connect to the People API so that members of a nation can sign into your app from within a NB page for that nation.
- Other options?
Are any of those options emerging as common or recommended?
What are NB customer expectations around 3rd party app integration? I don't expect they'd be too happy with requiring that the members of their nation sign in twice-- once to NB and once to the app. That's what I found with one client I worked with.
Thanks!
What kind of apps do NB clients need but do not have yet?
As a third-party app builder, I'm wondering what the NB staff hears about "apps NB customers wish they had."
I figure this is a good question to throw out there in the open, because many of the app developers on this list could benefit from hearing some advice about the unmet needs of current NB customers.
Please give us the ability to highlight streets without bubbles!!!
All I want in the whole world right now is to have the ability to give people walk maps without bubbles, and with highlighted streets. Too many bubbles on a street makes for an almost unreadable street map.
I've even seen walk maps with directional arrows for people. Google maps used to have a tool for this. Would this be something NB could activate or employ?
People API Membership Creation
I've used the People API to sync members between another system and NB but the API doesn't appear to set memberships on the new person record. Even with membership_level_name set no corresponding membership record is created for that person.
Furthermore no error is given if a non-existent membership type is specified. Is the people API not capable of creating memberships, am I doing it wrong, or has something changed?
OAuth Callback with App Id
When receiving the code parameter in our oauth callback page, can you also pass the nation slug and appname or client id with that code so we know which nation/app the request came from? This would allow us reuse code in many places on our side. I tried adding url parameters to my oauth callback url, but the app form would not allow it. Thanks!
Update: Nevermind. I can't put url params in the callback url, but I can put params in the redirect_uri to be passed back to me. Thanks!
completed
Scott, our CTO's recommendation is you use cookies to to track users and sessions - so, set a cookie when someone first lands on your site, and with each subsequent request (even redirects back to the site) they will submit the same cookie. This is the standard way that websites verify that the user behind request A and request B are the same person.
Required JSON format structor
Hi,
I am very curious as how you guys know what fields are required for any JSON format. There is no example of what is required or not. Can anybody shed some light?
Thanks.
Ryan
A question about Sign Up pages.
Hi All,
We use the Victory theme.The sign up demands that the single line address is filled. We don't want that as we have custom fields to collect addresses. So how do I edit the page to not require the single line address box be filled? I expect it has some thing to do with the code below. By the way we will be getting rid of any way for the members to log in.
{% if page.signup.is_all_info_collected? == false %}
{% if request.sorta_logged_in? %}
{% submit_tag "Update info", class:"submit-button" %}
{% else %}
{% submit_tag "Signup", class:"submit-button" %}
{% endif %}
{% endif %}
{% endform_for %}
Criteria for External ID on Survey
I've been trying to specify and external id for my surveys. Sometimes if a really obvious one is chosen (e.g. 4) I get told that this has already been taken. When I pick a non-obvious one there is no error but the external_id fails to be reflected in the survey.
I don't know if this is a big or there's just some criterion that I'm missing for what constitutes a valid external_id.
Remove Questions
I thought questions where associated with a specific Survey (given that that's how they're added via the API). But when I delete a survey the questions persist.
Is there any way to delete questions?
Bug tracker
I think NB needs a bug tracker. Is there one I'm missing. Currently, we report bugs via point people or by developer email addresses that we happen to have. This system does not work for a variety of reasons.
I've reported many bugs via point people, and mostly they are misunderstood or ignored. I am sitting on about a dozen low or medium priority bugs that I'd happy report, but since I can only do so through point people I only report major, show-stopping bugs. And even then they usually don't get through to the engineers until I start squeaking.
A professional bug tracker that the engineering team can directly access, without point people as gate keepers, is important.
completed
If you're experiencing a bug, please contact our support team at [email protected] and follow these steps for reporting your bug.
Thanks!
API: DELETE /lists/:list_id/listings/:person_id => 404 response for person in the list.
using this command (all variables in {} are substituted in):
curl -X DELETE --header "Content-Type: application/json" --header "Accept:application/json" https://{MY_SLUG}.nationbuilder.com/api/v1/lists/{THE_LIST}/listings/{MY_ID}?access_token=...
i get a 404 response even though the person is in list (previously checked using api explorer).
can you please fix this?
Does Nationbuilder have a Rails 4 API gem in the works?
/events/:id has Contact.phone missing 1st number
Ive tested this in the API explorer as well as with the following command line invocation:
curl -X GET --header "Content-Type: application/json" --header "Accept: application/json" https://agv.nationbuilder.com/api/v1/sites/agv/pages/events/\?id\=...\&access_token=...
Both produce contact phone numbers with the first number missing
e.g. 0411222333 is given as 411222333
Viewing the event via http://victoria.greens.org.au/ocean_grove_doorknock_and_snack
we see that the correct, full phone number is displayed.
Can you please fix this?
Recording Pledge Data via the API
I'm working for a non-profit that is running a pledge drive, and has pledge form on its website. Is there any way we can move pledge data into NationBuilder via the API? I don't see pledges referenced anywhere in the documentation.
How to set the featured content
I'm trying to import a few Wordpress sites using the API. On each of them every blog post has a header image. The equivalent in NationBuilder would be to add a signle featured content slider to each page, but I don't see anything in the API to do this. Am I missing something? If this can't be done, is there a way to set HTML before the content_before_flip?
How to get client id and api secret
How to get client id and api secret
completed
Steps 3 and 4 of our API Quickstart guide describe how to obtain a client ID and API access token:
Subscribe to list widget
I want to add a box to my site that allows users to sign up for a mailing list that we are now migrating to NationBuilder.
My site is Python/Django. I have this already set up with Mailchimp.
The Python Quickstart doc doesn't explain what the variables 'code' or 'REDIRECT_URI' are or how they should function in step 4.
This should be pretty basic functionality. Am I missing something? Is there a simpler way to implement this?
completed
Brett, for a single-nation use, just use an app test token - you can find that in your nation's control panel under Settings > Apps.
Deleted/Merged webhook
This is needed to ensure proper cotnact synchronization between an external database and NationBuilder. You can delete from NB, but no webhook fires when data is removed or merged.
People API Update endpoint always errors
I'm using the Update endpoint, with the request straight from the documentation:
curl 'https://[nation].nationbuilder.com/api/v1/people/[id]?access_token=[token]' -X PUT -H 'Content-Type: application/json' -d '{"person":{"first_name":"Joe","email":"[email protected]","phone":"303-555-0841"}}'
I receive this response:
{"code":"server_error","message":"You have encountered a server error."}
This is after creating a record using the People Create endpoint, and verifying the record is available with the People Show endpoint.
Any help appreciated.
People API fails to create address resources
I'm using the Create endpoint, with the request straight from the documentation:
curl 'https://[nation].nationbuilder.com/api/v1/people?access_token=[token]' -X POST -H 'Content-Type: application/json' -d '{"person":{"email":"[email protected]","last_name":"Smith","first_name":"Bob","sex":"M","employer":"DexterLabs","party":"P","registered_address":{"state":"TX","country_code":"US"}}}'
I receive a full response body, but with
"registered_address":null
Any help appreciated.
completed
I tested this code with my sandbox nation slug and access token and was able to confirm that the response body does return TX and US for the registered_address state and country code. It also shows up for this signup record in the nation:
- "registered_address": { "address1": null, "address2": null, "address3": null, "city": null, "county": null, "state": "TX", "country_code": "US",
Pulling statistics from the API
I'm trying to display some data from our campaign on a dashboard (http://shopify.github.io/dashing/) by pulling the information through the API. I'm able to get the total number of people from the People index resource, but can't figure out how to do anything more complicated, such as the number of people with a support level of 1 or 2. I have a filter in my control panel for it but the closest I can get would be to add those people to a list and query that, which isn't dynamic.
Any thoughts or pointers?
Thanks.
Donation Synchronization, and Donation Search Endpoint
For my organization's use case, we need a synchronization of all donation records, in order to produce financial reports, and for other uses. This requires high reliability of the synchronization process.
- Webhooks provide a synchronization potential with the downside that, like webhooks of other internet-based services, there is almost no feedback about webhook invocation failures. This makes not meet the requirements of our use case.
- Querying the table of donation records as a replacement, or a verification procedure, of the webhook method would be workable. However, since donations do not currently provide a search endpoint with an "updated_since" parameter, this creates the problem of having to download the whole donation table each time a synchronization is required. This limitation makes the method virtually unusable for production employment in our use case.
Could you lift any of these limitations, or is there another way to solve this problem. Again, we have the legal necessity of not missing any records, or misrepresenting any record fields.
Thanks,
--
Pav
Request for a webhook on petition signature
This would be radical. Thanks!
People Update server error
I'm trying to update a supporter record and running in to a 500 error.
I did a PUT request to
https://[nation].nationbuilder.com/api/v1/people/[id]?access_token=[token]
using the data:
{"person":{"first_name":"Jane","last_name":"Smith","phone":"123-456-7890"}}
This is the response:
HTTP/1.1 500 Internal Server Error
Date: Wed, 09 Apr 2014 14:38:59 GMT
Server: Apache/2.2.22 (Ubuntu)
X-UA-Compatible: IE=Edge,chrome=1
Cache-Control: no-cache
Nation-RateLimit-Limit: 15000
Nation-RateLimit-Remaining: 14978
Nation-RateLimit-Reset: 1397088000
X-Request-Id: 61ca028a58830a98d0c83ce60c18d079
X-Runtime: 0.532239
X-Rack-Cache: invalidate, pass
X-Powered-By: Phusion Passenger 4.0.23
Status: 500 Internal Server Error
Vary: Accept-Encoding
Content-Type: application/json
Via: 1.1 nationbuilder.com
Connection: close
Transfer-Encoding: chunked
{"code":"server_error","message":"You have encountered a server error.","inner_error":{"name":"NoMethodError","message":"undefined method `strip' for nil:NilClass"}}
The same data POSTed to the create endpoint successfully created a supporter, and I'm using the same function to PUT tags.
Any ideas what could be causing this?
People Create Endpoint and PHP.
Set date when awarding social capital
I would like to be able to set the date when awarding social capital. More importantly I would like to do this through the API.
The reasoning for this is that if we manually award SC for somebody who volunteered to work a shift at one of our events, we would like the date that the SC was awarded to be the same date as the event. We actually have a backlog of SC that I was planning on importing using the API and just realized that I can't set the award date.
Events API "guests_count" parameter clarification
Posted this on the Events API page (http://nationbuilder.com/events_api) but thought I should post here as well:
For the guests_count parameter, what is the API referencing? When you create an event, you have the option to do a simple RSVP and include +1s. However, if you have ticket sales, you purchase a number of tickets. Does guest_count reference +1s or number or tickets, or both? Ideally, it would great if it’s both!
Test Token Example
You have great examples on how to navigate the minefield that is OAUTH, but now that you have test tokens, I'd like to see some simple example code on how to use the test token (python/php or even curl).
Thanks
Dennis
completed
curl https://[slug].nationbuilder.com/api/v1/people/search?access_token=[my test token here] -X GET -H “Content-Type: application/json” -d ‘{"first_name":"Arion"}’
Searching people returns invalid json format error
I am searching people using this url:
https://malaysia.nationbuilder.com/api/v1/people/search?access_token=my_tokken
with header "Content-Type: application/json" and with following request body:
{"first_name":"abc"}
but it gives me error that json format is invalid
completed
You can accomplish this search with a cURL command wrapping your JSON into the URL. See below for the command you can run in Terminal:
curl https://malaysia.nationbuilder.com/api/v1/people/search?access_token=[my test token here] -X GET -H “Content-Type: application/json” -d ‘{"first_name":"abs"}’