nationbuilder-rb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 83841921d09006469ddc14f13acb12e99ba87277
4
+ data.tar.gz: 35766c21dbb833903cd33d27ebdd1b4ecebbcf1d
5
+ SHA512:
6
+ metadata.gz: 92dbc9527dbb3162b1c6303e21248e7d708bb53508e62e70b8c6a53e272cd87f81b9878315c77e3bd71a3d55b425c4772bc5daf7aeaf21f9b9b27e7fa1aaf894
7
+ data.tar.gz: 4ebd640859fa7673ed3f129de176600af1fcaff2c3ce62ebd5b10396fe567d7a84178c8d75205622b4de972ef85ab9366e40ffec7ad0e3ce692c310f5fdd16bb
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ nationbuilder-rb
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'httpclient', '~> 2.4.0'
4
+
5
+ group :development do
6
+ gem 'jeweler', '~> 2.0.1'
7
+ gem 'rspec', '~> 2.8.0'
8
+ gem 'simplecov', '~> 0.8.2'
9
+ gem 'vcr', '~> 2.9.2'
10
+ gem 'webmock', '~> 1.18.0'
11
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,82 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.3.6)
5
+ builder (3.2.2)
6
+ crack (0.4.2)
7
+ safe_yaml (~> 1.0.0)
8
+ descendants_tracker (0.0.4)
9
+ thread_safe (~> 0.3, >= 0.3.1)
10
+ diff-lcs (1.1.3)
11
+ docile (1.1.5)
12
+ faraday (0.9.0)
13
+ multipart-post (>= 1.2, < 3)
14
+ git (1.2.7)
15
+ github_api (0.11.3)
16
+ addressable (~> 2.3)
17
+ descendants_tracker (~> 0.0.1)
18
+ faraday (~> 0.8, < 0.10)
19
+ hashie (>= 1.2)
20
+ multi_json (>= 1.7.5, < 2.0)
21
+ nokogiri (~> 1.6.0)
22
+ oauth2
23
+ hashie (3.1.0)
24
+ highline (1.6.21)
25
+ httpclient (2.4.0)
26
+ jeweler (2.0.1)
27
+ builder
28
+ bundler (>= 1.0)
29
+ git (>= 1.2.5)
30
+ github_api
31
+ highline (>= 1.6.15)
32
+ nokogiri (>= 1.5.10)
33
+ rake
34
+ rdoc
35
+ json (1.8.1)
36
+ jwt (1.0.0)
37
+ mini_portile (0.6.0)
38
+ multi_json (1.10.1)
39
+ multi_xml (0.5.5)
40
+ multipart-post (2.0.0)
41
+ nokogiri (1.6.2.1)
42
+ mini_portile (= 0.6.0)
43
+ oauth2 (0.9.4)
44
+ faraday (>= 0.8, < 0.10)
45
+ jwt (~> 1.0)
46
+ multi_json (~> 1.3)
47
+ multi_xml (~> 0.5)
48
+ rack (~> 1.2)
49
+ rack (1.5.2)
50
+ rake (10.3.2)
51
+ rdoc (4.1.1)
52
+ json (~> 1.4)
53
+ rspec (2.8.0)
54
+ rspec-core (~> 2.8.0)
55
+ rspec-expectations (~> 2.8.0)
56
+ rspec-mocks (~> 2.8.0)
57
+ rspec-core (2.8.0)
58
+ rspec-expectations (2.8.0)
59
+ diff-lcs (~> 1.1.2)
60
+ rspec-mocks (2.8.0)
61
+ safe_yaml (1.0.3)
62
+ simplecov (0.8.2)
63
+ docile (~> 1.1.0)
64
+ multi_json
65
+ simplecov-html (~> 0.8.0)
66
+ simplecov-html (0.8.0)
67
+ thread_safe (0.3.4)
68
+ vcr (2.9.2)
69
+ webmock (1.18.0)
70
+ addressable (>= 2.3.6)
71
+ crack (>= 0.3.2)
72
+
73
+ PLATFORMS
74
+ ruby
75
+
76
+ DEPENDENCIES
77
+ httpclient (~> 2.4.0)
78
+ jeweler (~> 2.0.1)
79
+ rspec (~> 2.8.0)
80
+ simplecov (~> 0.8.2)
81
+ vcr (~> 2.9.2)
82
+ webmock (~> 1.18.0)
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2014 NationBuilder.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,103 @@
1
+ # nationbuilder-rb
2
+
3
+ A Ruby client for the NationBuilder API.
4
+
5
+ ## Installing
6
+
7
+ To install this gem to your current gemset, run:
8
+
9
+ ```shell
10
+ $ gem install nationbuilder-rb
11
+ ```
12
+
13
+ Or, add this to your gemfile:
14
+
15
+ ```ruby
16
+ gem 'nationbuilder-rb'
17
+ ```
18
+
19
+ ## Creating a client
20
+
21
+ Require the gem:
22
+
23
+ ```ruby
24
+ require 'nationbuilder'
25
+ ```
26
+
27
+ Then, create a client by specifying the name of your nation and
28
+ your API token:
29
+
30
+ ```ruby
31
+ client = NationBuilder::Client.new('my_nation_name', 'my_api_token')
32
+ ```
33
+
34
+ ## Calling the API
35
+
36
+ There is only a single method for calling the NationBuilder API in
37
+ `nationbuilder-rb`, and that's the `#call` method on a client. The
38
+ `#call` method takes three parameters: the name of the endpoint,
39
+ the name of the method, and an optional hash containing arguments
40
+ for the method.
41
+
42
+ ## Examples
43
+
44
+ ### Fetching a person
45
+
46
+ ```ruby
47
+ client.call(:people, :show, id: 15)
48
+ ```
49
+
50
+ ### Creating a person
51
+
52
+ ```ruby
53
+ params = {
54
+ person: {
55
+ email: "bob@example.com",
56
+ last_name: "Smith",
57
+ first_name: "Bob"
58
+ }
59
+ }
60
+
61
+ client.call(:people, :create, params)
62
+ ```
63
+
64
+ ### Destroying a person
65
+
66
+ ```ruby
67
+ client.call(:people, :destroy, id: 15)
68
+ ```
69
+
70
+ ## Documentation
71
+
72
+ This gem includes a command line utility that prints out
73
+ all covered endpoints, methods, and parameters. To see
74
+ documentation for a single endpoint, run:
75
+
76
+ ```shell
77
+ $ nbdoc ENDPOINT_NAME
78
+ ```
79
+
80
+ To see all documentation, don't provide a endpoint name:
81
+
82
+ ```shell
83
+ $ nbdoc
84
+ ```
85
+
86
+ ### Example
87
+
88
+ ```
89
+ $ nbdoc basic_pages
90
+
91
+ =====================
92
+ Endpoint: basic_pages
93
+ =====================
94
+
95
+ Method: :index
96
+ Description: Shows a list of the basic pages in the system
97
+ Required parameters: :site_slug
98
+
99
+ Method: :create
100
+ Description: Creates a basic page for a site
101
+ Required parameters: :site_slug
102
+ ...
103
+ ```
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'jeweler'
4
+
5
+ Jeweler::Tasks.new do |gem|
6
+ gem.name = 'nationbuilder-rb'
7
+ gem.homepage = 'http://github.com/3dna/nationbuilder-rb'
8
+ gem.license = 'MIT'
9
+ gem.summary = 'A Ruby client to the NationBuilder API'
10
+ gem.description = 'A Ruby client to the NationBuilder API'
11
+ gem.email = 'david@nationbuilder.com'
12
+ gem.authors = ['David Huie']
13
+ end
14
+
15
+ Jeweler::RubygemsDotOrgTasks.new
16
+
17
+ require 'rspec/core'
18
+ require 'rspec/core/rake_task'
19
+
20
+ RSpec::Core::RakeTask.new(:spec) do |spec|
21
+ spec.pattern = FileList['spec/**/*_spec.rb']
22
+ end
23
+
24
+ desc 'Code coverage detail'
25
+ task :simplecov do
26
+ ENV['COVERAGE'] = '1'
27
+ Rake::Task['spec'].execute
28
+ end
29
+
30
+ task default: :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
data/bin/nbdoc ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Prints out a description of all NationBuilder API endpoints.
4
+
5
+ require 'nationbuilder'
6
+
7
+ endpoint = ARGV.shift
8
+ client = NationBuilder::Client.new('test-nation', 'test-key')
9
+
10
+ if endpoint
11
+ client.print_description(endpoint)
12
+ else
13
+ client.print_all_descriptions
14
+ end
@@ -0,0 +1,24 @@
1
+ require 'httpclient'
2
+ require 'json'
3
+ require 'set'
4
+ require 'uri'
5
+
6
+ module NationBuilder
7
+
8
+ URL_TEMPLATE = 'https://:nation_name.nationbuilder.com'
9
+
10
+ def self.generate_url(base_url, extension, parameters)
11
+ url = URI.join(base_url, '/api/v1' + extension).to_s
12
+ parameters.each do |name, value|
13
+ url.gsub!(name.inspect, value.to_s)
14
+ end
15
+ url
16
+ end
17
+
18
+ end
19
+
20
+ require 'nationbuilder/client'
21
+ require 'nationbuilder/endpoint'
22
+ require 'nationbuilder/method'
23
+ require 'nationbuilder/parameter'
24
+ require 'nationbuilder/spec_parser'
@@ -0,0 +1,2151 @@
1
+ {
2
+ "endpoints": [
3
+ {
4
+ "name": "Basic Pages",
5
+ "methods": [
6
+ {
7
+ "MethodName": "Index",
8
+ "Synopsis": "Shows a list of the basic pages in the system",
9
+ "HTTPMethod": "GET",
10
+ "URI": "/sites/:site_slug/pages/basic_pages",
11
+ "parameters": [
12
+ {
13
+ "Name": "site_slug",
14
+ "Required": "Y",
15
+ "Default": null,
16
+ "Type": "string",
17
+ "Description": "the site holding the basic page"
18
+ },
19
+ {
20
+ "Name": "page",
21
+ "Required": "N",
22
+ "Default": "1",
23
+ "Type": "int",
24
+ "Description": "result page number"
25
+ },
26
+ {
27
+ "Name": "per_page",
28
+ "Required": "N",
29
+ "Default": "10",
30
+ "Type": "int",
31
+ "Description": "number of results to return"
32
+ }
33
+ ]
34
+ },
35
+ {
36
+ "MethodName": "Create",
37
+ "Synopsis": "Creates a basic page for a site",
38
+ "HTTPMethod": "POST",
39
+ "URI": "/sites/:site_slug/pages/basic_pages",
40
+ "parameters": [
41
+ {
42
+ "Name": "site_slug",
43
+ "Required": "Y",
44
+ "Default": null,
45
+ "Type": "string",
46
+ "Description": "the site holding the basic page"
47
+ },
48
+ {
49
+ "Name": "body",
50
+ "Required": "Y",
51
+ "Default": null,
52
+ "Type": "json",
53
+ "Description": "a JSON representation of the new basic page"
54
+ }
55
+ ]
56
+ },
57
+ {
58
+ "MethodName": "Update",
59
+ "Synopsis": "Updates the attributes of a basic page",
60
+ "HTTPMethod": "PUT",
61
+ "URI": "/sites/:site_slug/pages/basic_pages/:id",
62
+ "parameters": [
63
+ {
64
+ "Name": "site_slug",
65
+ "Required": "Y",
66
+ "Default": null,
67
+ "Type": "string",
68
+ "Description": "the site holding the basic page"
69
+ },
70
+ {
71
+ "Name": "id",
72
+ "Required": "Y",
73
+ "Default": null,
74
+ "Type": "int",
75
+ "Description": "the ID of the basic page"
76
+ },
77
+ {
78
+ "Name": "body",
79
+ "Required": "Y",
80
+ "Default": null,
81
+ "Type": "json",
82
+ "Description": "JSON containing updates"
83
+ }
84
+ ]
85
+ },
86
+ {
87
+ "MethodName": "Destroy",
88
+ "Synopsis": "Removes a basic page",
89
+ "HTTPMethod": "DELETE",
90
+ "URI": "/sites/:site_slug/pages/basic_pages/:id",
91
+ "parameters": [
92
+ {
93
+ "Name": "site_slug",
94
+ "Required": "Y",
95
+ "Default": null,
96
+ "Type": "string",
97
+ "Description": "the site holding the basic page"
98
+ },
99
+ {
100
+ "Name": "id",
101
+ "Required": "Y",
102
+ "Default": null,
103
+ "Type": "int",
104
+ "Description": "the ID of the basic page"
105
+ }
106
+ ]
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ "name": "Blogs",
112
+ "methods": [
113
+ {
114
+ "MethodName": "Index",
115
+ "Synopsis": "Shows a list of all blogs",
116
+ "HTTPMethod": "GET",
117
+ "URI": "/sites/:site_slug/pages/blogs",
118
+ "parameters": [
119
+ {
120
+ "Name": "site_slug",
121
+ "Required": "Y",
122
+ "Default": null,
123
+ "Type": "string",
124
+ "Description": "the site holding the blog"
125
+ },
126
+ {
127
+ "Name": "page",
128
+ "Required": "N",
129
+ "Default": "1",
130
+ "Type": "int",
131
+ "Description": "result page number"
132
+ },
133
+ {
134
+ "Name": "per_page",
135
+ "Required": "N",
136
+ "Default": "10",
137
+ "Type": "int",
138
+ "Description": "number of results to return"
139
+ }
140
+ ]
141
+ },
142
+ {
143
+ "MethodName": "Show",
144
+ "Synopsis": "Show the details of a blog",
145
+ "HTTPMethod": "GET",
146
+ "URI": "/sites/:site_slug/pages/blogs/:id",
147
+ "parameters": [
148
+ {
149
+ "Name": "site_slug",
150
+ "Required": "Y",
151
+ "Default": null,
152
+ "Type": "string",
153
+ "Description": "the site holding the blog"
154
+ },
155
+ {
156
+ "Name": "id",
157
+ "Required": "Y",
158
+ "Default": null,
159
+ "Type": "int",
160
+ "Description": "the ID of the blog"
161
+ }
162
+ ]
163
+ },
164
+ {
165
+ "MethodName": "Create",
166
+ "Synopsis": "Creates a new blog",
167
+ "HTTPMethod": "POST",
168
+ "URI": "/sites/:site_slug/pages/blogs",
169
+ "parameters": [
170
+ {
171
+ "Name": "site_slug",
172
+ "Required": "Y",
173
+ "Default": null,
174
+ "Type": "string",
175
+ "Description": "the site holding the blog"
176
+ },
177
+ {
178
+ "Name": "body",
179
+ "Required": "Y",
180
+ "Default": "1",
181
+ "Type": "json",
182
+ "Description": "a JSON representation of the new blog"
183
+ }
184
+ ]
185
+ },
186
+ {
187
+ "MethodName": "Update",
188
+ "Synopsis": "Updates the attributes of a blog",
189
+ "HTTPMethod": "PUT",
190
+ "URI": "/sites/:site_slug/pages/blogs/:id",
191
+ "parameters": [
192
+ {
193
+ "Name": "site_slug",
194
+ "Required": "Y",
195
+ "Default": null,
196
+ "Type": "string",
197
+ "Description": "the site holding the blog"
198
+ },
199
+ {
200
+ "Name": "id",
201
+ "Required": "Y",
202
+ "Default": null,
203
+ "Type": "int",
204
+ "Description": "the ID of the blog"
205
+ },
206
+ {
207
+ "Name": "body",
208
+ "Required": "Y",
209
+ "Default": "1",
210
+ "Type": "json",
211
+ "Description": "JSON containing updates"
212
+ }
213
+ ]
214
+ },
215
+ {
216
+ "MethodName": "Destroy",
217
+ "Synopsis": "Removes a blog",
218
+ "HTTPMethod": "DELETE",
219
+ "URI": "/sites/:site_slug/pages/blogs/:id",
220
+ "parameters": [
221
+ {
222
+ "Name": "site_slug",
223
+ "Required": "Y",
224
+ "Default": null,
225
+ "Type": "string",
226
+ "Description": "the site holding the blog"
227
+ },
228
+ {
229
+ "Name": "id",
230
+ "Required": "Y",
231
+ "Default": null,
232
+ "Type": "int",
233
+ "Description": "the ID of the blog"
234
+ }
235
+ ]
236
+ }
237
+ ]
238
+ },
239
+ {
240
+ "name": "Blog Posts",
241
+ "methods": [
242
+ {
243
+ "MethodName": "Index",
244
+ "Synopsis": "Shows a list of blog's posts",
245
+ "HTTPMethod": "GET",
246
+ "URI": "/sites/:site_slug/pages/blogs/:id/posts",
247
+ "parameters": [
248
+ {
249
+ "Name": "site_slug",
250
+ "Required": "Y",
251
+ "Default": null,
252
+ "Type": "string",
253
+ "Description": "the site holding the blog"
254
+ },
255
+ {
256
+ "Name": "id",
257
+ "Required": "Y",
258
+ "Default": null,
259
+ "Type": "int",
260
+ "Description": "the ID of the blog"
261
+ },
262
+ {
263
+ "Name": "page",
264
+ "Required": "N",
265
+ "Default": "1",
266
+ "Type": "int",
267
+ "Description": "result page number"
268
+ },
269
+ {
270
+ "Name": "per_page",
271
+ "Required": "N",
272
+ "Default": "10",
273
+ "Type": "int",
274
+ "Description": "number of results to return"
275
+ }
276
+ ]
277
+ },
278
+ {
279
+ "MethodName": "Match",
280
+ "Synopsis": "Find a blog post by its external id",
281
+ "HTTPMethod": "GET",
282
+ "URI": "/sites/:site_slug/pages/blogs/:id/match",
283
+ "parameters": [
284
+ {
285
+ "Name": "site_slug",
286
+ "Required": "Y",
287
+ "Default": null,
288
+ "Type": "string",
289
+ "Description": "the site holding the blog"
290
+ },
291
+ {
292
+ "Name": "id",
293
+ "Required": "Y",
294
+ "Default": null,
295
+ "Type": "int",
296
+ "Description": "the ID of the blog"
297
+ },
298
+ {
299
+ "Name": "external_id",
300
+ "Required": "N",
301
+ "Default": "1",
302
+ "Type": "int",
303
+ "Description": "the external id of the post"
304
+ }
305
+ ]
306
+ },
307
+ {
308
+ "MethodName": "Create",
309
+ "Synopsis": "Creates a new blog post",
310
+ "HTTPMethod": "POST",
311
+ "URI": "/sites/:site_slug/pages/blogs/:blog_id/posts",
312
+ "parameters": [
313
+ {
314
+ "Name": "site_slug",
315
+ "Required": "Y",
316
+ "Default": null,
317
+ "Type": "string",
318
+ "Description": "the site holding the blog"
319
+ },
320
+ {
321
+ "Name": "blog_id",
322
+ "Required": "Y",
323
+ "Default": null,
324
+ "Type": "int",
325
+ "Description": "the ID of the blog"
326
+ },
327
+ {
328
+ "Name": "body",
329
+ "Required": "Y",
330
+ "Default": "1",
331
+ "Type": "json",
332
+ "Description": "a JSON representation of the new post"
333
+ }
334
+ ]
335
+ },
336
+ {
337
+ "MethodName": "Update",
338
+ "Synopsis": "Updates the attributes of a blog post",
339
+ "HTTPMethod": "PUT",
340
+ "URI": "/sites/:site_slug/pages/blogs/:blog_id/posts/:blog_post_id",
341
+ "parameters": [
342
+ {
343
+ "Name": "site_slug",
344
+ "Required": "Y",
345
+ "Default": null,
346
+ "Type": "string",
347
+ "Description": "the site holding the blog"
348
+ },
349
+ {
350
+ "Name": "blog_id",
351
+ "Required": "Y",
352
+ "Default": null,
353
+ "Type": "int",
354
+ "Description": "the ID of the blog"
355
+ },
356
+ {
357
+ "Name": "blog_post_id",
358
+ "Required": "Y",
359
+ "Default": null,
360
+ "Type": "int",
361
+ "Description": "the ID of the blog"
362
+ },
363
+ {
364
+ "Name": "body",
365
+ "Required": "Y",
366
+ "Default": "1",
367
+ "Type": "json",
368
+ "Description": "JSON containing updates"
369
+ }
370
+ ]
371
+ },
372
+ {
373
+ "MethodName": "Destroy",
374
+ "Synopsis": "Removes a blog post",
375
+ "HTTPMethod": "DELETE",
376
+ "URI": "/sites/:site_slug/pages/blogs/:blog_id/posts/:blog_post_id",
377
+ "parameters": [
378
+ {
379
+ "Name": "site_slug",
380
+ "Required": "Y",
381
+ "Default": null,
382
+ "Type": "string",
383
+ "Description": "the site holding the blog"
384
+ },
385
+ {
386
+ "Name": "blog_id",
387
+ "Required": "Y",
388
+ "Default": null,
389
+ "Type": "int",
390
+ "Description": "the ID of the blog"
391
+ },
392
+ {
393
+ "Name": "blog_post_id",
394
+ "Required": "Y",
395
+ "Default": null,
396
+ "Type": "int",
397
+ "Description": "the ID of the blog"
398
+ }
399
+ ]
400
+ }
401
+ ]
402
+ },
403
+ {
404
+ "name": "Calendars",
405
+ "methods": [
406
+ {
407
+ "MethodName": "Index",
408
+ "Synopsis": "Shows a list of calendars",
409
+ "HTTPMethod": "GET",
410
+ "URI": "/sites/:site_slug/pages/calendars",
411
+ "parameters": [
412
+ {
413
+ "Name": "site_slug",
414
+ "Required": "Y",
415
+ "Default": null,
416
+ "Type": "string",
417
+ "Description": "the site holding the calendars"
418
+ },
419
+ {
420
+ "Name": "page",
421
+ "Required": "N",
422
+ "Default": "1",
423
+ "Type": "int",
424
+ "Description": "result page number"
425
+ },
426
+ {
427
+ "Name": "per_page",
428
+ "Required": "N",
429
+ "Default": "10",
430
+ "Type": "int",
431
+ "Description": "number of results to return"
432
+ }
433
+ ]
434
+ },
435
+ {
436
+ "MethodName": "Show",
437
+ "Synopsis": "Show the details of a calendar",
438
+ "HTTPMethod": "GET",
439
+ "URI": "/sites/:site_slug/pages/calendars/:id",
440
+ "parameters": [
441
+ {
442
+ "Name": "site_slug",
443
+ "Required": "Y",
444
+ "Default": null,
445
+ "Type": "string",
446
+ "Description": "the site holding the calendar"
447
+ },
448
+ {
449
+ "Name": "id",
450
+ "Required": "Y",
451
+ "Default": null,
452
+ "Type": "int",
453
+ "Description": "the ID of the calendar"
454
+ }
455
+ ]
456
+ },
457
+ {
458
+ "MethodName": "Create",
459
+ "Synopsis": "Creates a new calendar",
460
+ "HTTPMethod": "POST",
461
+ "URI": "/sites/:site_slug/pages/calendars",
462
+ "parameters": [
463
+ {
464
+ "Name": "site_slug",
465
+ "Required": "Y",
466
+ "Default": null,
467
+ "Type": "string",
468
+ "Description": "the site holding the calendar"
469
+ },
470
+ {
471
+ "Name": "body",
472
+ "Required": "Y",
473
+ "Default": "1",
474
+ "Type": "json",
475
+ "Description": "a JSON representation of the new calendar"
476
+ }
477
+ ]
478
+ },
479
+ {
480
+ "MethodName": "Update",
481
+ "Synopsis": "Updates the attributes of a calendar",
482
+ "HTTPMethod": "PUT",
483
+ "URI": "/sites/:site_slug/pages/calendars/:id",
484
+ "parameters": [
485
+ {
486
+ "Name": "site_slug",
487
+ "Required": "Y",
488
+ "Default": null,
489
+ "Type": "string",
490
+ "Description": "the site holding the calendar"
491
+ },
492
+ {
493
+ "Name": "id",
494
+ "Required": "Y",
495
+ "Default": null,
496
+ "Type": "int",
497
+ "Description": "the ID of the calendar"
498
+ },
499
+ {
500
+ "Name": "body",
501
+ "Required": "Y",
502
+ "Default": "1",
503
+ "Type": "json",
504
+ "Description": "JSON containing updates"
505
+ }
506
+ ]
507
+ },
508
+ {
509
+ "MethodName": "Destroy",
510
+ "Synopsis": "Removes a calendar",
511
+ "HTTPMethod": "DELETE",
512
+ "URI": "/sites/:site_slug/pages/calendars/:id",
513
+ "parameters": [
514
+ {
515
+ "Name": "site_slug",
516
+ "Required": "Y",
517
+ "Default": null,
518
+ "Type": "string",
519
+ "Description": "the site holding the calendar"
520
+ },
521
+ {
522
+ "Name": "id",
523
+ "Required": "Y",
524
+ "Default": null,
525
+ "Type": "int",
526
+ "Description": "the ID of the calendar"
527
+ }
528
+ ]
529
+ }
530
+ ]
531
+ },
532
+ {
533
+ "name": "Campaign Data",
534
+ "methods": [
535
+ {
536
+ "MethodName": "Show",
537
+ "Synopsis": "Shows campaign metadata about the nation",
538
+ "HTTPMethod": "GET",
539
+ "URI": "/campaign_data",
540
+ "parameters": [
541
+
542
+ ]
543
+ }
544
+ ]
545
+ },
546
+ {
547
+ "name": "Contacts",
548
+ "methods": [
549
+ {
550
+ "MethodName": "Index",
551
+ "Synopsis": "View a paginated list of a person's contacts",
552
+ "HTTPMethod": "GET",
553
+ "URI": "/people/:person_id/contacts",
554
+ "parameters": [
555
+ {
556
+ "Name": "person_id",
557
+ "Required": "Y",
558
+ "Default": null,
559
+ "Type": "int",
560
+ "Description": "the person's ID"
561
+ },
562
+ {
563
+ "Name": "page",
564
+ "Required": "N",
565
+ "Default": "1",
566
+ "Type": "int",
567
+ "Description": "result page number"
568
+ },
569
+ {
570
+ "Name": "per_page",
571
+ "Required": "N",
572
+ "Default": "10",
573
+ "Type": "int",
574
+ "Description": "number of results to return"
575
+ }
576
+ ]
577
+ },
578
+ {
579
+ "MethodName": "Create",
580
+ "Synopsis": "Record a contact for a person",
581
+ "HTTPMethod": "POST",
582
+ "URI": "/people/:person_id/contacts",
583
+ "parameters": [
584
+ {
585
+ "Name": "person_id",
586
+ "Required": "Y",
587
+ "Default": null,
588
+ "Type": "int",
589
+ "Description": "the person's ID"
590
+ },
591
+ {
592
+ "Name": "body",
593
+ "Required": "Y",
594
+ "Default": null,
595
+ "Type": "json",
596
+ "Description": "a JSON representation of the new contact"
597
+ }
598
+ ]
599
+ }
600
+ ]
601
+ },
602
+ {
603
+ "name": "Contact Types",
604
+ "methods": [
605
+ {
606
+ "MethodName": "Index",
607
+ "Synopsis": "Returns paginated list of nation-defined contact types",
608
+ "HTTPMethod": "GET",
609
+ "URI": "/settings/contact_types",
610
+ "parameters": [
611
+ {
612
+ "Name": "page",
613
+ "Required": "N",
614
+ "Default": "1",
615
+ "Type": "int",
616
+ "Description": "result page number"
617
+ },
618
+ {
619
+ "Name": "per_page",
620
+ "Required": "N",
621
+ "Default": "10",
622
+ "Type": "int",
623
+ "Description": "number of results to return"
624
+ }
625
+ ]
626
+ },
627
+ {
628
+ "MethodName": "Create",
629
+ "Synopsis": "Creates a new contact type",
630
+ "HTTPMethod": "POST",
631
+ "URI": "/settings/contact_types",
632
+ "parameters": [
633
+ {
634
+ "Name": "body",
635
+ "Required": "Y",
636
+ "Default": null,
637
+ "Type": "json",
638
+ "Description": "a JSON representation of the new contact type"
639
+ }
640
+ ]
641
+ },
642
+ {
643
+ "MethodName": "Update",
644
+ "Synopsis": "Updates an existing contact type",
645
+ "HTTPMethod": "PUT",
646
+ "URI": "/settings/contact_types/:id",
647
+ "parameters": [
648
+ {
649
+ "Name": "id",
650
+ "Required": "Y",
651
+ "Default": null,
652
+ "Type": "int",
653
+ "Description": "the ID of the existing contact type"
654
+ },
655
+ {
656
+ "Name": "body",
657
+ "Required": "Y",
658
+ "Default": null,
659
+ "Type": "json",
660
+ "Description": "a JSON representation of the updates to make"
661
+ }
662
+ ]
663
+ },
664
+ {
665
+ "MethodName": "Destroy",
666
+ "Synopsis": "Destroys a contact type",
667
+ "HTTPMethod": "DELETE",
668
+ "URI": "/settings/contact_types/:id",
669
+ "parameters": [
670
+ {
671
+ "Name": "id",
672
+ "Required": "Y",
673
+ "Default": null,
674
+ "Type": "int",
675
+ "Description": "the ID of the existing contact type"
676
+ }
677
+ ]
678
+ },
679
+ {
680
+ "MethodName": "List Methods",
681
+ "Synopsis": "Lists all contact methods",
682
+ "HTTPMethod": "GET",
683
+ "URI": "/settings/contact_methods",
684
+ "parameters": [
685
+
686
+ ]
687
+ },
688
+ {
689
+ "MethodName": "List Statuses",
690
+ "Synopsis": "Lists all contact status types",
691
+ "HTTPMethod": "GET",
692
+ "URI": "/settings/contact_statuses",
693
+ "parameters": [
694
+
695
+ ]
696
+ }
697
+ ]
698
+ },
699
+ {
700
+ "name": "Donations",
701
+ "methods": [
702
+ {
703
+ "MethodName": "Index",
704
+ "Synopsis": "Returns a list of donations",
705
+ "HTTPMethod": "GET",
706
+ "URI": "/donations",
707
+ "parameters": [
708
+ {
709
+ "Name": "page",
710
+ "Required": "N",
711
+ "Default": "1",
712
+ "Type": "int",
713
+ "Description": "result page number"
714
+ },
715
+ {
716
+ "Name": "per_page",
717
+ "Required": "N",
718
+ "Default": "10",
719
+ "Type": "int",
720
+ "Description": "number of results to return"
721
+ }
722
+ ]
723
+ },
724
+ {
725
+ "MethodName": "Create",
726
+ "Synopsis": "Creates a donation with the provided data",
727
+ "HTTPMethod": "POST",
728
+ "URI": "/donations",
729
+ "parameters": [
730
+ {
731
+ "Name": "body",
732
+ "Required": "Y",
733
+ "Default": "{}",
734
+ "Type": "json",
735
+ "Description": "JSON representation of a donation"
736
+ }
737
+ ]
738
+ },
739
+ {
740
+ "MethodName": "Update",
741
+ "Synopsis": "Updates a donation with the provided data",
742
+ "HTTPMethod": "PUT",
743
+ "URI": "/donations/:id",
744
+ "parameters": [
745
+ {
746
+ "Name": "id",
747
+ "Required": "Y",
748
+ "Default": null,
749
+ "Type": "int",
750
+ "Description": "The donation's ID"
751
+ },
752
+ {
753
+ "Name": "body",
754
+ "Required": "Y",
755
+ "Default": "{}",
756
+ "Type": "json",
757
+ "Description": "JSON attributes for updating the donation"
758
+ }
759
+ ]
760
+ },
761
+ {
762
+ "MethodName": "Destroy",
763
+ "Synopsis": "Removes the donation with the matching ID",
764
+ "HTTPMethod": "DELETE",
765
+ "URI": "/donations/:id",
766
+ "parameters": [
767
+ {
768
+ "Name": "id",
769
+ "Required": "Y",
770
+ "Default": null,
771
+ "Type": "int",
772
+ "Description": "The donation's ID"
773
+ }
774
+ ]
775
+ }
776
+ ]
777
+ },
778
+ {
779
+ "name": "Events",
780
+ "methods": [
781
+ {
782
+ "MethodName": "Index",
783
+ "Synopsis": "Returns a list of events",
784
+ "HTTPMethod": "GET",
785
+ "URI": "/sites/:site_slug/pages/events",
786
+ "parameters": [
787
+ {
788
+ "Name": "site_slug",
789
+ "Required": "Y",
790
+ "Default": null,
791
+ "Type": "string",
792
+ "Description": "the site holding the event"
793
+ },
794
+ {
795
+ "Name": "page",
796
+ "Required": "N",
797
+ "Default": "1",
798
+ "Type": "int",
799
+ "Description": "result page number"
800
+ },
801
+ {
802
+ "Name": "per_page",
803
+ "Required": "N",
804
+ "Default": "10",
805
+ "Type": "int",
806
+ "Description": "number of results to return"
807
+ },
808
+ {
809
+ "Name": "tags",
810
+ "Required": "N",
811
+ "Default": null,
812
+ "Type": "string",
813
+ "Description": "tags that must be present on the event"
814
+ },
815
+ {
816
+ "Name": "starting",
817
+ "Required": "N",
818
+ "Default": null,
819
+ "Type": "string",
820
+ "Description": "earliest starting time"
821
+ },
822
+ {
823
+ "Name": "until",
824
+ "Required": "N",
825
+ "Default": null,
826
+ "Type": "string",
827
+ "Description": "latest ending time"
828
+ },
829
+ {
830
+ "Name": "calendar_id",
831
+ "Required": "N",
832
+ "Default": null,
833
+ "Type": "int",
834
+ "Description": "the ID of the calendar from which events should be scoped"
835
+ }
836
+ ]
837
+ },
838
+ {
839
+ "MethodName": "Show",
840
+ "Synopsis": "Returns an event",
841
+ "HTTPMethod": "GET",
842
+ "URI": "/sites/:site_slug/pages/events/:id",
843
+ "parameters": [
844
+ {
845
+ "Name": "site_slug",
846
+ "Required": "Y",
847
+ "Default": null,
848
+ "Type": "string",
849
+ "Description": "the site holding the event"
850
+ },
851
+ {
852
+ "Name": "id",
853
+ "Required": "Y",
854
+ "Default": null,
855
+ "Type": "int",
856
+ "Description": "the ID of the event"
857
+ }
858
+ ]
859
+ },
860
+ {
861
+ "MethodName": "Create",
862
+ "Synopsis": "Creates a event with the provided data",
863
+ "HTTPMethod": "POST",
864
+ "URI": "/sites/:site_slug/pages/events",
865
+ "parameters": [
866
+ {
867
+ "Name": "site_slug",
868
+ "Required": "Y",
869
+ "Default": null,
870
+ "Type": "string",
871
+ "Description": "the site holding the event"
872
+ },
873
+ {
874
+ "Name": "body",
875
+ "Required": "Y",
876
+ "Default": "{}",
877
+ "Type": "json",
878
+ "Description": "JSON representation of a event"
879
+ }
880
+ ]
881
+ },
882
+ {
883
+ "MethodName": "Update",
884
+ "Synopsis": "Updates a event with the provided data",
885
+ "HTTPMethod": "PUT",
886
+ "URI": "/sites/:site_slug/pages/events/:id",
887
+ "parameters": [
888
+ {
889
+ "Name": "site_slug",
890
+ "Required": "Y",
891
+ "Default": null,
892
+ "Type": "string",
893
+ "Description": "the site holding the event"
894
+ },
895
+ {
896
+ "Name": "id",
897
+ "Required": "Y",
898
+ "Default": null,
899
+ "Type": "int",
900
+ "Description": "The event's ID"
901
+ },
902
+ {
903
+ "Name": "body",
904
+ "Required": "Y",
905
+ "Default": "{}",
906
+ "Type": "json",
907
+ "Description": "JSON attributes for updating the event"
908
+ }
909
+ ]
910
+ },
911
+ {
912
+ "MethodName": "Destroy",
913
+ "Synopsis": "Removes the event with the matching ID",
914
+ "HTTPMethod": "DELETE",
915
+ "URI": "/sites/:site_slug/pages/events/:id",
916
+ "parameters": [
917
+ {
918
+ "Name": "site_slug",
919
+ "Required": "Y",
920
+ "Default": null,
921
+ "Type": "string",
922
+ "Description": "the site holding the event"
923
+ },
924
+ {
925
+ "Name": "id",
926
+ "Required": "Y",
927
+ "Default": null,
928
+ "Type": "int",
929
+ "Description": "The event's ID"
930
+ }
931
+ ]
932
+ },
933
+ {
934
+ "MethodName": "RSVPs",
935
+ "Synopsis": "Lists all RSVPs for an event",
936
+ "HTTPMethod": "GET",
937
+ "URI": "/sites/:site_slug/pages/events/:id/rsvps",
938
+ "parameters": [
939
+ {
940
+ "Name": "site_slug",
941
+ "Required": "Y",
942
+ "Default": null,
943
+ "Type": "string",
944
+ "Description": "the site holding the event"
945
+ },
946
+ {
947
+ "Name": "id",
948
+ "Required": "Y",
949
+ "Default": null,
950
+ "Type": "int",
951
+ "Description": "The event's ID"
952
+ },
953
+ {
954
+ "Name": "page",
955
+ "Required": "N",
956
+ "Default": "1",
957
+ "Type": "int",
958
+ "Description": "result page number"
959
+ },
960
+ {
961
+ "Name": "per_page",
962
+ "Required": "N",
963
+ "Default": "10",
964
+ "Type": "int",
965
+ "Description": "number of results to return"
966
+ }
967
+ ]
968
+ },
969
+ {
970
+ "MethodName": "RSVP Create",
971
+ "Synopsis": "Creates an RSVP for an event",
972
+ "HTTPMethod": "POST",
973
+ "URI": "/sites/:site_slug/pages/events/:id/rsvps",
974
+ "parameters": [
975
+ {
976
+ "Name": "site_slug",
977
+ "Required": "Y",
978
+ "Default": null,
979
+ "Type": "string",
980
+ "Description": "the site holding the event"
981
+ },
982
+ {
983
+ "Name": "id",
984
+ "Required": "Y",
985
+ "Default": null,
986
+ "Type": "int",
987
+ "Description": "The event's ID"
988
+ },
989
+ {
990
+ "Name": "body",
991
+ "Required": "Y",
992
+ "Default": null,
993
+ "Type": "json",
994
+ "Description": "A JSON representation of the new post"
995
+ }
996
+ ]
997
+ },
998
+ {
999
+ "MethodName": "RSVP Update",
1000
+ "Synopsis": "Updates an existing RSVP",
1001
+ "HTTPMethod": "PUT",
1002
+ "URI": "/sites/:site_slug/pages/events/:event_id/rsvps/:rsvp_id",
1003
+ "parameters": [
1004
+ {
1005
+ "Name": "site_slug",
1006
+ "Required": "Y",
1007
+ "Default": null,
1008
+ "Type": "string",
1009
+ "Description": "the site holding the event"
1010
+ },
1011
+ {
1012
+ "Name": "event_id",
1013
+ "Required": "Y",
1014
+ "Default": null,
1015
+ "Type": "int",
1016
+ "Description": "The event's ID"
1017
+ },
1018
+ {
1019
+ "Name": "rsvp_id",
1020
+ "Required": "Y",
1021
+ "Default": null,
1022
+ "Type": "int",
1023
+ "Description": "The RSVP's ID"
1024
+ },
1025
+ {
1026
+ "Name": "body",
1027
+ "Required": "Y",
1028
+ "Default": null,
1029
+ "Type": "json",
1030
+ "Description": "JSON attributes for updating the RSVP"
1031
+ }
1032
+ ]
1033
+ }
1034
+ ]
1035
+ },
1036
+ {
1037
+ "name": "Imports",
1038
+ "methods": [
1039
+ {
1040
+ "MethodName": "Show",
1041
+ "Synopsis": "Shows the status of an import",
1042
+ "HTTPMethod": "GET",
1043
+ "URI": "/imports/:id",
1044
+ "parameters": [
1045
+ {
1046
+ "Name": "id",
1047
+ "Required": "Y",
1048
+ "Default": null,
1049
+ "Type": "int",
1050
+ "Description": "the ID of the import"
1051
+ }
1052
+ ]
1053
+ },
1054
+ {
1055
+ "MethodName": "Create",
1056
+ "Synopsis": "Creates a import with the provided data",
1057
+ "HTTPMethod": "POST",
1058
+ "URI": "/imports",
1059
+ "parameters": [
1060
+ {
1061
+ "Name": "type",
1062
+ "Required": "Y",
1063
+ "Default": null,
1064
+ "Type": "string",
1065
+ "Description": "either \"voter_file\" or \"voting_history\""
1066
+ },
1067
+ {
1068
+ "Name": "file",
1069
+ "Required": "Y",
1070
+ "Default": null,
1071
+ "Type": "string",
1072
+ "Description": "Base 64 (RFC 4648) encoded version of a CSV"
1073
+ }
1074
+ ]
1075
+ }
1076
+ ]
1077
+ },
1078
+ {
1079
+ "name": "Lists",
1080
+ "methods": [
1081
+ {
1082
+ "MethodName": "Index",
1083
+ "Synopsis": "Returns a list of created custom lists",
1084
+ "HTTPMethod": "GET",
1085
+ "URI": "/lists",
1086
+ "parameters": [
1087
+ {
1088
+ "Name": "page",
1089
+ "Required": "N",
1090
+ "Default": "1",
1091
+ "Type": "int",
1092
+ "Description": "result page number"
1093
+ },
1094
+ {
1095
+ "Name": "per_page",
1096
+ "Required": "N",
1097
+ "Default": "10",
1098
+ "Type": "int",
1099
+ "Description": "number of results to return"
1100
+ }
1101
+ ]
1102
+ },
1103
+ {
1104
+ "MethodName": "People",
1105
+ "Synopsis": "Returns people stored in a list",
1106
+ "HTTPMethod": "GET",
1107
+ "URI": "/lists/:id/people",
1108
+ "parameters": [
1109
+ {
1110
+ "Name": "id",
1111
+ "Required": "Y",
1112
+ "Default": null,
1113
+ "Type": "int",
1114
+ "Description": "The list's ID"
1115
+ },
1116
+ {
1117
+ "Name": "page",
1118
+ "Required": "N",
1119
+ "Default": "1",
1120
+ "Type": "int",
1121
+ "Description": "result page number"
1122
+ },
1123
+ {
1124
+ "Name": "per_page",
1125
+ "Required": "N",
1126
+ "Default": "10",
1127
+ "Type": "int",
1128
+ "Description": "number of results to return"
1129
+ }
1130
+ ]
1131
+ },
1132
+ {
1133
+ "MethodName": "Create",
1134
+ "Synopsis": "Creates a list with the provided data",
1135
+ "HTTPMethod": "POST",
1136
+ "URI": "/lists",
1137
+ "parameters": [
1138
+ {
1139
+ "Name": "body",
1140
+ "Required": "Y",
1141
+ "Default": "{}",
1142
+ "Type": "json",
1143
+ "Description": "JSON representation of the list to create"
1144
+ }
1145
+ ]
1146
+ },
1147
+ {
1148
+ "MethodName": "Update",
1149
+ "Synopsis": "Updates a list with the provided data",
1150
+ "HTTPMethod": "PUT",
1151
+ "URI": "/lists/:id",
1152
+ "parameters": [
1153
+ {
1154
+ "Name": "id",
1155
+ "Required": "Y",
1156
+ "Default": null,
1157
+ "Type": "int",
1158
+ "Description": "The list's ID"
1159
+ },
1160
+ {
1161
+ "Name": "body",
1162
+ "Required": "Y",
1163
+ "Default": "{}",
1164
+ "Type": "json",
1165
+ "Description": "JSON attributes for updating the list"
1166
+ }
1167
+ ]
1168
+ },
1169
+ {
1170
+ "MethodName": "Destroy",
1171
+ "Synopsis": "Removes the list with the matching ID",
1172
+ "HTTPMethod": "DELETE",
1173
+ "URI": "/lists/:id",
1174
+ "parameters": [
1175
+ {
1176
+ "Name": "id",
1177
+ "Required": "Y",
1178
+ "Default": null,
1179
+ "Type": "int",
1180
+ "Description": "The list's ID"
1181
+ }
1182
+ ]
1183
+ },
1184
+ {
1185
+ "MethodName": "Listing Create",
1186
+ "Synopsis": "Adds a person to a list",
1187
+ "HTTPMethod": "POST",
1188
+ "URI": "/lists/:list_id/listings",
1189
+ "parameters": [
1190
+ {
1191
+ "Name": "list_id",
1192
+ "Required": "Y",
1193
+ "Default": null,
1194
+ "Type": "int",
1195
+ "Description": "The ID of the list"
1196
+ },
1197
+ {
1198
+ "Name": "person_id",
1199
+ "Required": "Y",
1200
+ "Default": null,
1201
+ "Type": "int",
1202
+ "Description": "The ID of the person to add to the list"
1203
+ }
1204
+ ]
1205
+ },
1206
+ {
1207
+ "MethodName": "Listing Deletion",
1208
+ "Synopsis": "Drops a person from a list",
1209
+ "HTTPMethod": "DELETE",
1210
+ "URI": "/lists/:list_id/listings/:person_id",
1211
+ "parameters": [
1212
+ {
1213
+ "Name": "list_id",
1214
+ "Required": "Y",
1215
+ "Default": null,
1216
+ "Type": "int",
1217
+ "Description": "The ID of the list"
1218
+ },
1219
+ {
1220
+ "Name": "person_id",
1221
+ "Required": "Y",
1222
+ "Default": null,
1223
+ "Type": "int",
1224
+ "Description": "The ID of the person to drop from the list"
1225
+ }
1226
+ ]
1227
+ },
1228
+ {
1229
+ "MethodName": "Add tag",
1230
+ "Synopsis": "Adds a tag to all of the list members",
1231
+ "HTTPMethod": "POST",
1232
+ "URI": "/lists/:list_id/tag/:tag",
1233
+ "parameters": [
1234
+ {
1235
+ "Name": "list_id",
1236
+ "Required": "Y",
1237
+ "Default": null,
1238
+ "Type": "int",
1239
+ "Description": "The ID of the list"
1240
+ },
1241
+ {
1242
+ "Name": "tag",
1243
+ "Required": "Y",
1244
+ "Default": null,
1245
+ "Type": "string",
1246
+ "Description": "The name of the tag to use"
1247
+ }
1248
+ ]
1249
+ },
1250
+ {
1251
+ "MethodName": "Delete tag",
1252
+ "Synopsis": "Deletes the tag from all of the list members",
1253
+ "HTTPMethod": "DELETE",
1254
+ "URI": "/lists/:list_id/tag/:tag",
1255
+ "parameters": [
1256
+ {
1257
+ "Name": "list_id",
1258
+ "Required": "Y",
1259
+ "Default": null,
1260
+ "Type": "int",
1261
+ "Description": "The ID of the list"
1262
+ },
1263
+ {
1264
+ "Name": "tag",
1265
+ "Required": "Y",
1266
+ "Default": null,
1267
+ "Type": "string",
1268
+ "Description": "The name of the tag to use"
1269
+ }
1270
+ ]
1271
+ }
1272
+ ]
1273
+ },
1274
+ {
1275
+ "name": "Page Attachments",
1276
+ "methods": [
1277
+ {
1278
+ "MethodName": "Index",
1279
+ "Synopsis": "Returns a list of a page's file attachments",
1280
+ "HTTPMethod": "GET",
1281
+ "URI": "/sites/:site_slug/pages/:page_slug/attachments",
1282
+ "parameters": [
1283
+ {
1284
+ "Name": "site_slug",
1285
+ "Required": "Y",
1286
+ "Default": null,
1287
+ "Type": "string",
1288
+ "Description": "The slug of the site the page lives on"
1289
+ },
1290
+ {
1291
+ "Name": "page_slug",
1292
+ "Required": "Y",
1293
+ "Default": "1",
1294
+ "Type": "string",
1295
+ "Description": "The page's slug"
1296
+ },
1297
+ {
1298
+ "Name": "page",
1299
+ "Required": "N",
1300
+ "Default": "1",
1301
+ "Type": "int",
1302
+ "Description": "result page number"
1303
+ },
1304
+ {
1305
+ "Name": "per_page",
1306
+ "Required": "N",
1307
+ "Default": "10",
1308
+ "Type": "int",
1309
+ "Description": "number of results to return"
1310
+ }
1311
+ ]
1312
+ },
1313
+ {
1314
+ "MethodName": "Show",
1315
+ "Synopsis": "Creates a new file attachment for a page",
1316
+ "HTTPMethod": "GET",
1317
+ "URI": "/sites/:site_slug/pages/:page_slug/attachments/:id",
1318
+ "parameters": [
1319
+ {
1320
+ "Name": "site_slug",
1321
+ "Required": "Y",
1322
+ "Default": null,
1323
+ "Type": "string",
1324
+ "Description": "The slug of the site the page lives on"
1325
+ },
1326
+ {
1327
+ "Name": "page_slug",
1328
+ "Required": "Y",
1329
+ "Default": "1",
1330
+ "Type": "string",
1331
+ "Description": "The page's slug"
1332
+ },
1333
+ {
1334
+ "Name": "id",
1335
+ "Required": "Y",
1336
+ "Default": null,
1337
+ "Type": "int",
1338
+ "Description": "The ID of the page attachment"
1339
+ }
1340
+ ]
1341
+ },
1342
+ {
1343
+ "MethodName": "Create",
1344
+ "Synopsis": "Creates a new file attachment for a page",
1345
+ "HTTPMethod": "POST",
1346
+ "URI": "/sites/:site_slug/pages/:page_slug/attachments",
1347
+ "parameters": [
1348
+ {
1349
+ "Name": "site_slug",
1350
+ "Required": "Y",
1351
+ "Default": null,
1352
+ "Type": "string",
1353
+ "Description": "The slug of the site the page lives on"
1354
+ },
1355
+ {
1356
+ "Name": "page_slug",
1357
+ "Required": "Y",
1358
+ "Default": "1",
1359
+ "Type": "string",
1360
+ "Description": "The page's slug"
1361
+ },
1362
+ {
1363
+ "Name": "body",
1364
+ "Required": "Y",
1365
+ "Default": "{}",
1366
+ "Type": "json",
1367
+ "Description": "A JSON representation of the attachment"
1368
+ }
1369
+ ]
1370
+ },
1371
+ {
1372
+ "MethodName": "Destroy",
1373
+ "Synopsis": "Destroys a file attachment for a page",
1374
+ "HTTPMethod": "DELETE",
1375
+ "URI": "/sites/:site_slug/pages/:page_slug/attachments/:id",
1376
+ "parameters": [
1377
+ {
1378
+ "Name": "site_slug",
1379
+ "Required": "Y",
1380
+ "Default": null,
1381
+ "Type": "string",
1382
+ "Description": "The slug of the site the page lives on"
1383
+ },
1384
+ {
1385
+ "Name": "page_slug",
1386
+ "Required": "Y",
1387
+ "Default": "1",
1388
+ "Type": "string",
1389
+ "Description": "The page's slug"
1390
+ },
1391
+ {
1392
+ "Name": "id",
1393
+ "Required": "Y",
1394
+ "Default": null,
1395
+ "Type": "int",
1396
+ "Description": "The ID of the page attachment"
1397
+ }
1398
+ ]
1399
+ }
1400
+ ]
1401
+ },
1402
+ {
1403
+ "name": "People",
1404
+ "methods": [
1405
+ {
1406
+ "MethodName": "Index",
1407
+ "Synopsis": "Returns a list of people",
1408
+ "HTTPMethod": "GET",
1409
+ "URI": "/people",
1410
+ "parameters": [
1411
+ {
1412
+ "Name": "page",
1413
+ "Required": "N",
1414
+ "Default": "1",
1415
+ "Type": "int",
1416
+ "Description": "result page number"
1417
+ },
1418
+ {
1419
+ "Name": "per_page",
1420
+ "Required": "N",
1421
+ "Default": "10",
1422
+ "Type": "int",
1423
+ "Description": "number of results to return"
1424
+ }
1425
+ ]
1426
+ },
1427
+ {
1428
+ "MethodName": "Show",
1429
+ "Synopsis": "Returns a full representation of the person",
1430
+ "HTTPMethod": "GET",
1431
+ "URI": "/people/:id",
1432
+ "parameters": [
1433
+ {
1434
+ "Name": "id",
1435
+ "Required": "Y",
1436
+ "Default": "1",
1437
+ "Type": "int",
1438
+ "Description": "the person's id"
1439
+ }
1440
+ ]
1441
+ },
1442
+ {
1443
+ "MethodName": "Match",
1444
+ "Synopsis": "Finds people that match certain attributes exactly",
1445
+ "HTTPMethod": "GET",
1446
+ "URI": "/people/match",
1447
+ "parameters": [
1448
+ {
1449
+ "Name": "email",
1450
+ "Required": "N",
1451
+ "Default": null,
1452
+ "Type": "string",
1453
+ "Description": null
1454
+ },
1455
+ {
1456
+ "Name": "first_name",
1457
+ "Required": "N",
1458
+ "Default": null,
1459
+ "Type": "string",
1460
+ "Description": null
1461
+ },
1462
+ {
1463
+ "Name": "last_name",
1464
+ "Required": "N",
1465
+ "Default": null,
1466
+ "Type": "string",
1467
+ "Description": null
1468
+ },
1469
+ {
1470
+ "Name": "phone",
1471
+ "Required": "N",
1472
+ "Default": null,
1473
+ "Type": "string",
1474
+ "Description": null
1475
+ },
1476
+ {
1477
+ "Name": "mobile",
1478
+ "Required": "N",
1479
+ "Default": null,
1480
+ "Type": "string",
1481
+ "Description": null
1482
+ }
1483
+ ]
1484
+ },
1485
+ {
1486
+ "MethodName": "Search",
1487
+ "Synopsis": "Search for people using non-unique traits",
1488
+ "HTTPMethod": "GET",
1489
+ "URI": "/people/search",
1490
+ "parameters": [
1491
+ {
1492
+ "Name": "first_name",
1493
+ "Required": "N",
1494
+ "Default": null,
1495
+ "Type": "string",
1496
+ "Description": null
1497
+ },
1498
+ {
1499
+ "Name": "last_name",
1500
+ "Required": "N",
1501
+ "Default": null,
1502
+ "Type": "string",
1503
+ "Description": null
1504
+ },
1505
+ {
1506
+ "Name": "city",
1507
+ "Required": "N",
1508
+ "Default": null,
1509
+ "Type": "string",
1510
+ "Description": null
1511
+ },
1512
+ {
1513
+ "Name": "state",
1514
+ "Required": "N",
1515
+ "Default": null,
1516
+ "Type": "string",
1517
+ "Description": null
1518
+ },
1519
+ {
1520
+ "Name": "sex",
1521
+ "Required": "N",
1522
+ "Default": null,
1523
+ "Type": "string",
1524
+ "Description": null
1525
+ },
1526
+ {
1527
+ "Name": "birthdate",
1528
+ "Required": "N",
1529
+ "Default": null,
1530
+ "Type": "string",
1531
+ "Description": null
1532
+ },
1533
+ {
1534
+ "Name": "updated_since",
1535
+ "Required": "N",
1536
+ "Default": null,
1537
+ "Type": "string",
1538
+ "Description": null
1539
+ },
1540
+ {
1541
+ "Name": "with_mobile",
1542
+ "Required": "N",
1543
+ "Default": null,
1544
+ "Type": "string",
1545
+ "Description": null
1546
+ },
1547
+ {
1548
+ "Name": "custom_values",
1549
+ "Required": "N",
1550
+ "Default": null,
1551
+ "Type": "string",
1552
+ "Description": null
1553
+ },
1554
+ {
1555
+ "Name": "page",
1556
+ "Required": "N",
1557
+ "Default": "1",
1558
+ "Type": "int",
1559
+ "Description": null
1560
+ },
1561
+ {
1562
+ "Name": "per_page",
1563
+ "Required": "N",
1564
+ "Default": "100",
1565
+ "Type": "int",
1566
+ "Description": null
1567
+ }
1568
+ ]
1569
+ },
1570
+ {
1571
+ "MethodName": "Nearby",
1572
+ "Synopsis": "Searches for people near a location defined by latitude and longitude",
1573
+ "HTTPMethod": "GET",
1574
+ "URI": "/people/nearby",
1575
+ "parameters": [
1576
+ {
1577
+ "Name": "location",
1578
+ "Required": "Y",
1579
+ "Default": "34.049031,-118.251399",
1580
+ "Type": "string",
1581
+ "Description": "origin of search in the format \"latitude,longitude\""
1582
+ },
1583
+ {
1584
+ "Name": "distance",
1585
+ "Required": "N",
1586
+ "Default": "1",
1587
+ "Type": "int",
1588
+ "Description": "radius in miles for which to include results"
1589
+ },
1590
+ {
1591
+ "Name": "page",
1592
+ "Required": "N",
1593
+ "Default": "1",
1594
+ "Type": "int",
1595
+ "Description": "page number"
1596
+ },
1597
+ {
1598
+ "Name": "per_page",
1599
+ "Required": "N",
1600
+ "Default": "10",
1601
+ "Type": "int",
1602
+ "Description": "number of results to show per page"
1603
+ }
1604
+ ]
1605
+ },
1606
+ {
1607
+ "MethodName": "Me",
1608
+ "Synopsis": "Returns the access token's resource owner's representation",
1609
+ "HTTPMethod": "GET",
1610
+ "URI": "/people/me",
1611
+ "parameters": [
1612
+
1613
+ ]
1614
+ },
1615
+ {
1616
+ "MethodName": "Register",
1617
+ "Synopsis": "Starts user registration person for the given person",
1618
+ "HTTPMethod": "GET",
1619
+ "URI": "/people/:id/register",
1620
+ "parameters": [
1621
+ {
1622
+ "Name": "id",
1623
+ "Required": "Y",
1624
+ "Default": null,
1625
+ "Type": "int",
1626
+ "Description": "The person's ID"
1627
+ }
1628
+ ]
1629
+ },
1630
+ {
1631
+ "MethodName": "Taggings",
1632
+ "Synopsis": "Returns all taggings for a given person",
1633
+ "HTTPMethod": "GET",
1634
+ "URI": "/people/:id/taggings",
1635
+ "parameters": [
1636
+ {
1637
+ "Name": "id",
1638
+ "Required": "Y",
1639
+ "Default": null,
1640
+ "Type": "int",
1641
+ "Description": "the ID of the person"
1642
+ }
1643
+ ]
1644
+ },
1645
+ {
1646
+ "MethodName": "Tag Person",
1647
+ "Synopsis": "Tags a person",
1648
+ "HTTPMethod": "PUT",
1649
+ "URI": "/people/:id/taggings",
1650
+ "parameters": [
1651
+ {
1652
+ "Name": "id",
1653
+ "Required": "Y",
1654
+ "Default": null,
1655
+ "Type": "int",
1656
+ "Description": "the ID of the person"
1657
+ },
1658
+ {
1659
+ "Name": "body",
1660
+ "Required": "Y",
1661
+ "Default": null,
1662
+ "Type": "json",
1663
+ "Description": "JSON with tagging information"
1664
+ }
1665
+ ]
1666
+ },
1667
+ {
1668
+ "MethodName": "Tag Removal",
1669
+ "Synopsis": "Removes a tag from a person",
1670
+ "HTTPMethod": "DELETE",
1671
+ "URI": "/people/:id/taggings/:tag",
1672
+ "parameters": [
1673
+ {
1674
+ "Name": "id",
1675
+ "Required": "Y",
1676
+ "Default": null,
1677
+ "Type": "int",
1678
+ "Description": "the ID of the person"
1679
+ },
1680
+ {
1681
+ "Name": "tag",
1682
+ "Required": "Y",
1683
+ "Default": null,
1684
+ "Type": "string",
1685
+ "Description": "the name of the tag"
1686
+ }
1687
+ ]
1688
+ },
1689
+ {
1690
+ "MethodName": "Political Capital",
1691
+ "Synopsis": "Returns a paginated list of a person's capitals",
1692
+ "HTTPMethod": "GET",
1693
+ "URI": "/people/:id/capitals",
1694
+ "parameters": [
1695
+ {
1696
+ "Name": "id",
1697
+ "Required": "Y",
1698
+ "Default": null,
1699
+ "Type": "int",
1700
+ "Description": "the ID of the person"
1701
+ },
1702
+ {
1703
+ "Name": "page",
1704
+ "Required": "N",
1705
+ "Default": "1",
1706
+ "Type": "int",
1707
+ "Description": "page number"
1708
+ },
1709
+ {
1710
+ "Name": "per_page",
1711
+ "Required": "N",
1712
+ "Default": "10",
1713
+ "Type": "int",
1714
+ "Description": "number of results to show per page"
1715
+ }
1716
+ ]
1717
+ },
1718
+ {
1719
+ "MethodName": "Political Capital Create",
1720
+ "Synopsis": "Creates capital for the given person",
1721
+ "HTTPMethod": "POST",
1722
+ "URI": "/people/:id/capitals",
1723
+ "parameters": [
1724
+ {
1725
+ "Name": "id",
1726
+ "Required": "Y",
1727
+ "Default": null,
1728
+ "Type": "int",
1729
+ "Description": "the ID of the person"
1730
+ },
1731
+ {
1732
+ "Name": "body",
1733
+ "Required": "Y",
1734
+ "Default": null,
1735
+ "Type": "json",
1736
+ "Description": "JSON representation of the capital to create"
1737
+ }
1738
+ ]
1739
+ },
1740
+ {
1741
+ "MethodName": "Political Capital Destroy",
1742
+ "Synopsis": "Destroys capital for a person",
1743
+ "HTTPMethod": "DELETE",
1744
+ "URI": "/people/:person_id/capitals/:capital_id",
1745
+ "parameters": [
1746
+ {
1747
+ "Name": "person_id",
1748
+ "Required": "Y",
1749
+ "Default": null,
1750
+ "Type": "int",
1751
+ "Description": "the ID of the person"
1752
+ },
1753
+ {
1754
+ "Name": "capital_id",
1755
+ "Required": "Y",
1756
+ "Default": null,
1757
+ "Type": "int",
1758
+ "Description": "the ID of the capital to destroy"
1759
+ }
1760
+ ]
1761
+ },
1762
+ {
1763
+ "MethodName": "Create",
1764
+ "Synopsis": "Creates a person with the provided data",
1765
+ "HTTPMethod": "POST",
1766
+ "URI": "/people",
1767
+ "parameters": [
1768
+ {
1769
+ "Name": "body",
1770
+ "Required": "Y",
1771
+ "Default": "{}",
1772
+ "Type": "json",
1773
+ "Description": "JSON representation of the person to create"
1774
+ }
1775
+ ]
1776
+ },
1777
+ {
1778
+ "MethodName": "Update",
1779
+ "Synopsis": "Updates a person with the provided data",
1780
+ "HTTPMethod": "PUT",
1781
+ "URI": "/people/:id",
1782
+ "parameters": [
1783
+ {
1784
+ "Name": "id",
1785
+ "Required": "Y",
1786
+ "Default": null,
1787
+ "Type": "int",
1788
+ "Description": "The person's ID"
1789
+ },
1790
+ {
1791
+ "Name": "body",
1792
+ "Required": "Y",
1793
+ "Default": "{}",
1794
+ "Type": "json",
1795
+ "Description": "JSON attributes for updating the person"
1796
+ }
1797
+ ]
1798
+ },
1799
+ {
1800
+ "MethodName": "Push",
1801
+ "Synopsis": "Updates a matched person or creates a new one if the person doesn't exist",
1802
+ "HTTPMethod": "PUT",
1803
+ "URI": "/people/push",
1804
+ "parameters": [
1805
+ {
1806
+ "Name": "body",
1807
+ "Required": "Y",
1808
+ "Default": "{}",
1809
+ "Type": "json",
1810
+ "Description": "JSON attributes for updating/matching the person"
1811
+ }
1812
+ ]
1813
+ },
1814
+ {
1815
+ "MethodName": "Destroy",
1816
+ "Synopsis": "Removes the person with the matching ID",
1817
+ "HTTPMethod": "DELETE",
1818
+ "URI": "/people/:id",
1819
+ "parameters": [
1820
+ {
1821
+ "Name": "id",
1822
+ "Required": "Y",
1823
+ "Default": null,
1824
+ "Type": "int",
1825
+ "Description": "The person's ID"
1826
+ }
1827
+ ]
1828
+ }
1829
+ ]
1830
+ },
1831
+ {
1832
+ "name": "People Tags",
1833
+ "methods": [
1834
+ {
1835
+ "MethodName": "Index",
1836
+ "Synopsis": "Returns a list of previously used tags",
1837
+ "HTTPMethod": "GET",
1838
+ "URI": "/tags",
1839
+ "parameters": [
1840
+ {
1841
+ "Name": "page",
1842
+ "Required": "N",
1843
+ "Default": "1",
1844
+ "Type": "int",
1845
+ "Description": "result page number"
1846
+ },
1847
+ {
1848
+ "Name": "per_page",
1849
+ "Required": "N",
1850
+ "Default": "10",
1851
+ "Type": "int",
1852
+ "Description": "number of results to return"
1853
+ }
1854
+ ]
1855
+ },
1856
+ {
1857
+ "MethodName": "People",
1858
+ "Synopsis": "Searches for people with the given tag",
1859
+ "HTTPMethod": "GET",
1860
+ "URI": "/tags/:tag/people",
1861
+ "parameters": [
1862
+ {
1863
+ "Name": "tag",
1864
+ "Required": "Y",
1865
+ "Default": null,
1866
+ "Type": "string",
1867
+ "Description": "the name of the tag"
1868
+ },
1869
+ {
1870
+ "Name": "page",
1871
+ "Required": "N",
1872
+ "Default": "1",
1873
+ "Type": "int",
1874
+ "Description": "result page number"
1875
+ },
1876
+ {
1877
+ "Name": "per_page",
1878
+ "Required": "N",
1879
+ "Default": "10",
1880
+ "Type": "int",
1881
+ "Description": "number of results to return"
1882
+ }
1883
+ ]
1884
+ }
1885
+ ]
1886
+ },
1887
+ {
1888
+ "name": "Sites",
1889
+ "methods": [
1890
+ {
1891
+ "MethodName": "Index",
1892
+ "Synopsis": "Returns a list of all sites",
1893
+ "HTTPMethod": "GET",
1894
+ "URI": "/sites",
1895
+ "parameters": [
1896
+ {
1897
+ "Name": "page",
1898
+ "Required": "N",
1899
+ "Default": "1",
1900
+ "Type": "int",
1901
+ "Description": "result page number"
1902
+ },
1903
+ {
1904
+ "Name": "per_page",
1905
+ "Required": "N",
1906
+ "Default": "10",
1907
+ "Type": "int",
1908
+ "Description": "number of results to return"
1909
+ }
1910
+ ]
1911
+ }
1912
+ ]
1913
+ },
1914
+ {
1915
+ "name": "Surveys",
1916
+ "methods": [
1917
+ {
1918
+ "MethodName": "Index",
1919
+ "Synopsis": "Shows a list of all surveys for the a site",
1920
+ "HTTPMethod": "GET",
1921
+ "URI": "/sites/:site_slug/pages/surveys",
1922
+ "parameters": [
1923
+ {
1924
+ "Name": "site_slug",
1925
+ "Required": "Y",
1926
+ "Default": null,
1927
+ "Type": "string",
1928
+ "Description": "the site holding the survey"
1929
+ },
1930
+ {
1931
+ "Name": "page",
1932
+ "Required": "N",
1933
+ "Default": "1",
1934
+ "Type": "int",
1935
+ "Description": "result page number"
1936
+ },
1937
+ {
1938
+ "Name": "per_page",
1939
+ "Required": "N",
1940
+ "Default": "10",
1941
+ "Type": "int",
1942
+ "Description": "number of results to return"
1943
+ }
1944
+ ]
1945
+ },
1946
+ {
1947
+ "MethodName": "Create",
1948
+ "Synopsis": "Creates a survey for a site",
1949
+ "HTTPMethod": "POST",
1950
+ "URI": "/sites/:site_slug/pages/surveys",
1951
+ "parameters": [
1952
+ {
1953
+ "Name": "site_slug",
1954
+ "Required": "Y",
1955
+ "Default": null,
1956
+ "Type": "string",
1957
+ "Description": "the site holding the survey"
1958
+ },
1959
+ {
1960
+ "Name": "body",
1961
+ "Required": "Y",
1962
+ "Default": null,
1963
+ "Type": "json",
1964
+ "Description": "a JSON representation of the new survey"
1965
+ }
1966
+ ]
1967
+ },
1968
+ {
1969
+ "MethodName": "Update",
1970
+ "Synopsis": "Updates the attributes of a survey",
1971
+ "HTTPMethod": "PUT",
1972
+ "URI": "/sites/:site_slug/pages/surveys/:id",
1973
+ "parameters": [
1974
+ {
1975
+ "Name": "site_slug",
1976
+ "Required": "Y",
1977
+ "Default": null,
1978
+ "Type": "string",
1979
+ "Description": "the site holding the survey"
1980
+ },
1981
+ {
1982
+ "Name": "id",
1983
+ "Required": "Y",
1984
+ "Default": null,
1985
+ "Type": "int",
1986
+ "Description": "the ID of the survey"
1987
+ },
1988
+ {
1989
+ "Name": "body",
1990
+ "Required": "Y",
1991
+ "Default": null,
1992
+ "Type": "json",
1993
+ "Description": "JSON containing updates"
1994
+ }
1995
+ ]
1996
+ },
1997
+ {
1998
+ "MethodName": "Destroy",
1999
+ "Synopsis": "Removes a survey",
2000
+ "HTTPMethod": "DELETE",
2001
+ "URI": "/sites/:site_slug/pages/surveys/:id",
2002
+ "parameters": [
2003
+ {
2004
+ "Name": "site_slug",
2005
+ "Required": "Y",
2006
+ "Default": null,
2007
+ "Type": "string",
2008
+ "Description": "the site holding the survey"
2009
+ },
2010
+ {
2011
+ "Name": "id",
2012
+ "Required": "Y",
2013
+ "Default": null,
2014
+ "Type": "int",
2015
+ "Description": "the ID of the survey"
2016
+ }
2017
+ ]
2018
+ }
2019
+ ]
2020
+ },
2021
+ {
2022
+ "name": "Survey Responses",
2023
+ "methods": [
2024
+ {
2025
+ "MethodName": "Index",
2026
+ "Synopsis": "Lists all survey responses",
2027
+ "HTTPMethod": "GET",
2028
+ "URI": "/survey_responses",
2029
+ "parameters": [
2030
+ {
2031
+ "Name": "start_time",
2032
+ "Required": "N",
2033
+ "Default": null,
2034
+ "Type": "string",
2035
+ "Description": "the starting time for results"
2036
+ },
2037
+ {
2038
+ "Name": "end_time",
2039
+ "Required": "N",
2040
+ "Default": null,
2041
+ "Type": "string",
2042
+ "Description": "the ending time for results"
2043
+ },
2044
+ {
2045
+ "Name": "survey_id",
2046
+ "Required": "N",
2047
+ "Default": null,
2048
+ "Type": "int",
2049
+ "Description": "the id for a parent survey"
2050
+ },
2051
+ {
2052
+ "Name": "page",
2053
+ "Required": "N",
2054
+ "Default": "1",
2055
+ "Type": "int",
2056
+ "Description": "result page number"
2057
+ },
2058
+ {
2059
+ "Name": "per_page",
2060
+ "Required": "N",
2061
+ "Default": "10",
2062
+ "Type": "int",
2063
+ "Description": "number of results to return"
2064
+ }
2065
+ ]
2066
+ },
2067
+ {
2068
+ "MethodName": "Create",
2069
+ "Synopsis": "Creates responses for a survey",
2070
+ "HTTPMethod": "POST",
2071
+ "URI": "/survey_responses",
2072
+ "parameters": [
2073
+ {
2074
+ "Name": "body",
2075
+ "Required": "Y",
2076
+ "Default": null,
2077
+ "Type": "json",
2078
+ "Description": "a JSON representation of the survey responses"
2079
+ }
2080
+ ]
2081
+ }
2082
+ ]
2083
+ },
2084
+ {
2085
+ "name": "Webhooks",
2086
+ "methods": [
2087
+ {
2088
+ "MethodName": "Index",
2089
+ "Synopsis": "Lists all webhooks",
2090
+ "HTTPMethod": "GET",
2091
+ "URI": "/webhooks",
2092
+ "parameters": [
2093
+ {
2094
+ "Name": "page",
2095
+ "Required": "N",
2096
+ "Default": "1",
2097
+ "Type": "int",
2098
+ "Description": "result page number"
2099
+ },
2100
+ {
2101
+ "Name": "per_page",
2102
+ "Required": "N",
2103
+ "Default": "10",
2104
+ "Type": "int",
2105
+ "Description": "number of results to return"
2106
+ }
2107
+ ]
2108
+ },
2109
+ {
2110
+ "MethodName": "Show",
2111
+ "Synopsis": "Shows the details of an individual webhook",
2112
+ "HTTPMethod": "GET",
2113
+ "URI": "/webhooks/:id",
2114
+ "parameters": [
2115
+ {
2116
+ "Name": "id",
2117
+ "Required": "Y",
2118
+ "Default": null,
2119
+ "Type": "string",
2120
+ "Description": "the ID of the webhook to display"
2121
+ }
2122
+ ]
2123
+ },
2124
+ {
2125
+ "MethodName": "Create",
2126
+ "Synopsis": "Creates a new webhook",
2127
+ "HTTPMethod": "POST",
2128
+ "URI": "/webhooks",
2129
+ "parameters": [
2130
+ {
2131
+ "Name": "body",
2132
+ "Required": "Y",
2133
+ "Default": null,
2134
+ "Type": "json",
2135
+ "Description": "a JSON representation of the new webhook"
2136
+ }
2137
+ ]
2138
+ },
2139
+ {
2140
+ "MethodName": "Destroy",
2141
+ "Synopsis": "Destroys a webhook",
2142
+ "HTTPMethod": "DELETE",
2143
+ "URI": "/webhooks/:id",
2144
+ "parameters": [
2145
+
2146
+ ]
2147
+ }
2148
+ ]
2149
+ }
2150
+ ]
2151
+ }