heroku_api_stub 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "optparse"
4
+
5
+ require_relative "../lib/heroku_api_stub"
6
+
7
+ $stdout.sync = $stderr.sync = true
8
+
9
+ options = {
10
+ port: 4000
11
+ }
12
+ OptionParser.new do |opts|
13
+ opts.banner = "Usage: heroku-api-stub [options]"
14
+ opts.on("-p", "--port PORT", "Port to bind to") { |p| options[:port] = p }
15
+ end.parse!
16
+
17
+ app = HerokuAPIStub::Generator.new.run
18
+
19
+ app.run! port: options[:port]
data/data/doc.json ADDED
@@ -0,0 +1,1573 @@
1
+ {
2
+ "description": "The platform API empowers developers to automate, extend and combine Heroku with other services. You can use the platform API to programmatically create apps, provision add-ons and perform other tasks that could previously only be accomplished with Heroku toolbelt or dashboard. For details on getting started, see the [quickstart](https://devcenter.heroku.com/articles/platform-api-quickstart).",
3
+ "overview": {
4
+ "Authentication": [
5
+ "HTTP basic authentication must be constructed from email address and [api token](https://devcenter.heroku.com/articles/authentication) as `{email-address}:{api-token}`, base64 encoded and passed as the Authorization header for each request, for example `Authorization: Basic 0123456789ABCDEF=`.",
6
+ "API token authentication works well for personal scripts, but is not recommended for third party services. We plan to deliver OAuth later in the beta to provide better granularity and control when providing access to third party services."
7
+ ],
8
+ "Caching": "All responses include an `ETag` (or Entity Tag) header, identifying the specific version of a returned resource. You may use this value to check for changes to a resource by repeating the request and passing the `ETag` value in the `If-None-Match` header. If the resource has not changed, a `304 Not Modified` status will be returned with an empty body. If the resource has changed, the request will proceed normally.",
9
+ "Clients": "Clients must address requests to `api.heroku.com` using HTTPS and specify the `Accept: application/vnd.heroku+json; version=3` Accept header. Clients should specify a `User-Agent` header to facilitate tracking and debugging.",
10
+ "cURL Examples": [
11
+ "cURL examples are provided to facilitate experimentation. Variable values are represented as `$SOMETHING` so that you can manipulate them using environment variables. Examples use the `-n` option to fetch credentials from a `~/.netrc` file, which should include an entry for `api.heroku.com` similar to the following:",
12
+ "```\nmachine api.heroku.com\n login {your-email}\n password {your-api-token}\n```"
13
+ ],
14
+ "Custom Types": [
15
+ { "Name": "datetime", "JSON Type": "string", "Description": "timestamp in iso8601 format" },
16
+ { "Name": "uuid", "JSON Type": "string", "Description": "uuid in 8-4-4-4-12 format" }
17
+ ],
18
+ "Data Integrity": [
19
+ "Both unique id and more human-friendly attributes can be used reference resources. For example you can use `name` or `id` to refer to an app. Though the human-friendly version may be more convenient, `id` should be preferred to avoid ambiguity.",
20
+ "You may pass the `If-Match` header with an `ETag` value from a previous response to ensure a resource has not changed since you last received it. If the resource has changed, you will receive a `412 Precondition Failed` response. If the resource has not changed, the request will proceed normally."
21
+ ],
22
+ "Errors": "Failing responses will have an appropriate [status](#statuses) and a JSON body.",
23
+ "Error Attributes": [
24
+ { "Name": "id", "Type": "string", "Description": "id of error raised", "Example": "<code>\"rate_limit\"</code>" },
25
+ { "Name": "message", "Type": "string", "Description": "end user message of error raised ", "Example": "<code>\"Your account reached the API limit. Please wait a few minutes before making new requests\"</code>" }
26
+ ],
27
+ "Error Response": "```\nHTTP/1.1 429 Too Many Requests\n```\n```javascript\n{\n \"id\": \"rate_limit\",\n \"message\": \"Your account reached the API rate limit\\nPlease wait a few minutes before making new requests\"\n}\n```",
28
+ "Methods": [
29
+ { "Method": "DELETE", "Usage": "used for destroying existing objects" },
30
+ { "Method": "GET", "Usage": "used for retrieving lists and individual objects" },
31
+ { "Method": "HEAD", "Usage": "used for retrieving metadata about existing objects" },
32
+ { "Method": "PATCH", "Usage": "used for updating existing objects" },
33
+ { "Method": "PUT", "Usage": "used for replacing existing objects" },
34
+ { "Method": "POST", "Usage": "used for creating new objects" }
35
+ ],
36
+ "Method Override": "When using a client that does not support all of the [methods](#methods), you can override by using a `POST` and setting the `X-Http-Method-Override` header to the desired methed. For instance, to do a `PATCH` request, do a `POST` with header `X-Http-Method-Override: PATCH`.",
37
+ "Parameters": "Values that can be provided for an action are divided between optional and required values. The expected type for each value is specified and unlisted values should be considered immutable. Parameters should be JSON encoded and passed in the request body.",
38
+ "Ranges": [
39
+ "List requests will return a `Content-Range` header indicating the range of values returned. Large lists may require additional requests to retrieve. If a list response has been truncated you will receive a `206 Partial Content` status and one or both of `Next-Range` and `Prev-Range` headers if there are next and previous ranges respectively. To retrieve the next or previous range, repeat the request with the `Range` header set to either the `Next-Range` or `Prev-Range` value from the previous request.",
40
+ "The number of values returned in a range can be controlled using a `max` key in the `Range` header. For example, to get only the first 10 values, set this header: `Range: ids ..; max=10;`. `max` can also be passed when iterating over `Next-Range` and `Prev-Range`. The default page size is 200 and maximum page size is 1000."
41
+ ],
42
+ "Rate Limits": "The API limits the number of requests each user can make per hour to protect against abuse and buggy code. Each account has a pool of request tokens that can hold at most 1200 tokens. Each API call removes one token from the pool. Tokens are added to the account pool at a rate of 1200 per hour, up to a maximum of 1200. If no tokens remain, further calls will return 429 `Too Many Requests` until more tokens become available. You can use the `RateLimit-Remaining` response header to check your current token count. If you find your account is being rate limited but don't know the cause, consider cycling your API key on the account page on Heroku dashboard.",
43
+ "Request Id": "Each API request is given a unique request id to facilitate tracking. When reporting issues, providing this value makes it easier to pinpoint problems and provide solutions more quickly.",
44
+ "Responses": "Values returned by the API are split into a section with example status code and relevant headers (with common http headers omitted) and a section with an example JSON body (if any).",
45
+ "Response Headers": [
46
+ { "Header": "RateLimit-Remaining", "Description": "allowed requests remaining in current interval" }
47
+ ],
48
+ "Statuses": [
49
+ { "Code": 200, "Culprit": "Both", "Id": "OK", "Message": "request succeeded" },
50
+ { "Code": 201, "Culprit": "Both", "Id": "Created", "Message": "resource created, for example a new app was created or an add-on was provisioned" },
51
+ { "Code": 202, "Culprit": "Both", "Id": "Accepted", "Message": "request accepted, but the processing has not been completed" },
52
+ { "Code": 206, "Culprit": "Both", "Id": "Partial Content", "Message": "request succeeded, but this is only a partial response, see <a href='#ranges'>ranges</a>" },
53
+ { "Code": 400, "Culprit": "Client", "Id": "Bad Request", "Message": "request invalid, validate usage and try again" },
54
+ { "Code": 401, "Culprit": "Client", "Id": "Unauthorized", "Message": "request not authenticated, validate credentials and try again" },
55
+ { "Code": 402, "Culprit": "Client", "Id": "Payment Required", "Message": "request could not be billed, validate billing information and try again" },
56
+ { "Code": 403, "Culprit": "Client", "Id": "Forbidden", "Message": "request not authorized, provided credentials do not provide access to specified resource" },
57
+ { "Code": 404, "Culprit": "Client", "Id": "Not Found", "Message": "request failed, the specified resource does not exist" },
58
+ { "Code": 406, "Culprit": "Client", "Id": "Not Acceptable", "Message": "request failed, set <code>Accept: application/vnd.heroku+json; version=3</code> header and try again" },
59
+ { "Code": 416, "Culprit": "Client", "Id": "Requested Range Not Satisfiable", "Message": "request failed, validate <code>Content-Range</code> header and try again" },
60
+ { "Code": 422, "Culprit": "Client", "Id": "Unprocessable Entity", "Message": "request failed, validate parameters try again" },
61
+ { "Code": 429, "Culprit": "Client", "Id": "Too Many Requests", "Message": "request failed, wait for rate limits to reset and try again, see <a href='#rate-limits'>rate limits</a>" },
62
+ { "Code": 500, "Culprit": "Heroku", "Id": "Internal Server Error", "Message": "error occurred, we are notified, but contact <a href='https://help.heroku.com'>support</a> if the issue persists" },
63
+ { "Code": 503, "Culprit": "Heroku", "Id": "Service Unavailable", "Message": "API is unavailable, check response body or <a href='https://status.heroku.com'>Heroku status</a> for details" }
64
+ ],
65
+ "Versioning": "The beta and release of the api will all occur within version 3. We will provide warning and migration strategies for any backwards incompatible changes we might make during the beta and will commit to no backwards incompatible changes to version 3 after the release.",
66
+ "Warnings": "Responses with warnings will have add headers describing the warning.",
67
+ "Warning Headers": [
68
+ { "Header": "id", "Description": "id of warning", "Example": "<code>\"stack_deprecated\"</code>" },
69
+ { "Header": "message", "Description": "end user message for warning", "Example": "<code>\"This stack is deprecated.\"</code>" }
70
+ ]
71
+ },
72
+
73
+ "resources": {
74
+
75
+ "Account": {
76
+ "actions": {
77
+ "Info": {
78
+ "method": "GET",
79
+ "path": "/account",
80
+ "statuses": [200]
81
+ },
82
+ "Update": {
83
+ "attributes": {
84
+ "optional": [
85
+ "allow_tracking",
86
+ "email"
87
+ ]
88
+ },
89
+ "method": "PATCH",
90
+ "path": "/account",
91
+ "statuses": [200]
92
+ }
93
+ },
94
+ "attributes": {
95
+ "allow_tracking": {
96
+ "description": "whether to allow web activity tracking with third-party services like Google Analytics",
97
+ "example": true,
98
+ "serialized": true,
99
+ "type": "boolean"
100
+ },
101
+ "beta": {
102
+ "description": "whether to utilize beta Heroku features",
103
+ "example": false,
104
+ "serialized": true,
105
+ "type": "boolean"
106
+ },
107
+ "created_at": {
108
+ "description": "when account was created",
109
+ "example": "2012-01-01T12:00:00-00:00",
110
+ "serialized": true,
111
+ "type": "datetime"
112
+ },
113
+ "email": {
114
+ "description": "email address of account",
115
+ "example": "username@example.com",
116
+ "serialized": true,
117
+ "type": "string"
118
+ },
119
+ "id": {
120
+ "description": "unique identifier of account",
121
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
122
+ "serialized": true,
123
+ "type": "uuid"
124
+ },
125
+ "last_login": {
126
+ "description": "when account last authorized with Heroku",
127
+ "example": "2012-01-01T12:00:00-00:00",
128
+ "serialized": true,
129
+ "type": "datetime"
130
+ },
131
+ "updated_at": {
132
+ "description": "when account was updated",
133
+ "example": "2012-01-01T12:00:00-00:00",
134
+ "serialized": true,
135
+ "type": "datetime"
136
+ },
137
+ "verified": {
138
+ "description": "whether the account has been verified with billing information",
139
+ "example": false,
140
+ "serialized": true,
141
+ "type": "boolean"
142
+ }
143
+ },
144
+ "description": "An account represents you on Heroku."
145
+ },
146
+
147
+ "Account Password": {
148
+ "actions": {
149
+ "Update": {
150
+ "attributes": {
151
+ "required": [
152
+ "current_password",
153
+ "password"
154
+ ]
155
+ },
156
+ "method": "PUT",
157
+ "path": "/account/password",
158
+ "statuses": [200]
159
+ }
160
+ },
161
+ "attributes": {
162
+ "current_password": {
163
+ "description": "existing password value",
164
+ "example": "0123456789abcdef",
165
+ "serialized": false,
166
+ "type": "string"
167
+ },
168
+ "password": {
169
+ "description": "new password value",
170
+ "example": "abcdef0123456789",
171
+ "serialized": false,
172
+ "type": "string"
173
+ }
174
+ }
175
+ },
176
+
177
+ "Add-on": {
178
+ "actions": {
179
+ "Create": {
180
+ "attributes": {
181
+ "optional": [
182
+ "plan:name"
183
+ ]
184
+ },
185
+ "method": "POST",
186
+ "path": "/apps/{app_id_or_name}/addons",
187
+ "statuses": [201]
188
+ },
189
+ "List": {
190
+ "method": "GET",
191
+ "path": "/apps/{app_id_or_name}/addons",
192
+ "statuses": [200, 206]
193
+ },
194
+ "Info": {
195
+ "method": "GET",
196
+ "path": "/apps/{app_id_or_name}/addons/{addon_id_or_name}",
197
+ "statuses": [200]
198
+ },
199
+ "Update": {
200
+ "attributes": {
201
+ "optional": [
202
+ "plan:name"
203
+ ]
204
+ },
205
+ "method": "PATCH",
206
+ "path": "/apps/{app_id_or_name}/addons/{addon_id_or_name}",
207
+ "statuses": [200]
208
+ },
209
+ "Delete": {
210
+ "method": "DELETE",
211
+ "path": "/apps/{app_id_or_name}/addons/{addon_id_or_name}",
212
+ "statuses": [200]
213
+ }
214
+ },
215
+ "attributes": {
216
+ "created_at": {
217
+ "description": "when add-on was created",
218
+ "example": "2012-01-01T12:00:00-00:00",
219
+ "serialized": true,
220
+ "type": "datetime"
221
+ },
222
+ "id": {
223
+ "description": "unique identifier of this add-on",
224
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
225
+ "serialized": true,
226
+ "type": "uuid"
227
+ },
228
+ "plan:name": {
229
+ "description": "unique name for plan",
230
+ "example": "heroku-postgresql:dev",
231
+ "serialized": true,
232
+ "type": "string"
233
+ },
234
+ "updated_at": {
235
+ "description": "when add-on was updated",
236
+ "example": "2012-01-01T12:00:00-00:00",
237
+ "serialized": true,
238
+ "type": "datetime"
239
+ }
240
+ },
241
+ "description": "Add-ons represent add-ons that have been provisioned for an app."
242
+ },
243
+
244
+ "Add-on Service": {
245
+ "actions": {
246
+ "List": {
247
+ "method": "GET",
248
+ "path": "/addon-services",
249
+ "statuses": [200, 206]
250
+ },
251
+ "Info": {
252
+ "method": "GET",
253
+ "path": "/addon-services/{addon_service_id_or_name}",
254
+ "statuses": [200]
255
+ }
256
+ },
257
+ "attributes": {
258
+ "created_at": {
259
+ "description": "when add-on service was created",
260
+ "example": "2012-01-01T12:00:00-00:00",
261
+ "serialized": true,
262
+ "type": "datetime"
263
+ },
264
+ "name": {
265
+ "description": "unique name for add-on service",
266
+ "example": "heroku-postgresql",
267
+ "serialized": true,
268
+ "type": "string"
269
+ },
270
+ "updated_at": {
271
+ "description": "when add-on service was updated",
272
+ "example": "2012-01-01T12:00:00-00:00",
273
+ "serialized": true,
274
+ "type": "datetime"
275
+ }
276
+ },
277
+ "description": "Add-on services represent add-ons that may be provisioned for apps."
278
+ },
279
+
280
+
281
+ "App": {
282
+ "actions": {
283
+ "Create": {
284
+ "attributes": {
285
+ "optional": [
286
+ "name",
287
+ "region:id",
288
+ "region:name",
289
+ "stack"
290
+ ]
291
+ },
292
+ "method": "POST",
293
+ "path": "/apps",
294
+ "statuses": [201]
295
+ },
296
+ "List": {
297
+ "method": "GET",
298
+ "path": "/apps",
299
+ "statuses": [200, 206]
300
+ },
301
+ "Info": {
302
+ "method": "GET",
303
+ "path": "/apps/{app_id_or_name}",
304
+ "statuses": [200]
305
+ },
306
+ "Update": {
307
+ "attributes": {
308
+ "optional": [
309
+ "maintenance",
310
+ "name",
311
+ "owner:email",
312
+ "owner:id"
313
+ ]
314
+ },
315
+ "method": "PATCH",
316
+ "path": "/apps/{app_id_or_name}",
317
+ "statuses": [200]
318
+ },
319
+ "Delete": {
320
+ "method": "DELETE",
321
+ "path": "/apps/{app_id_or_name}",
322
+ "statuses": [200]
323
+ }
324
+ },
325
+ "attributes": {
326
+ "buildpack_provided_description": {
327
+ "description": "description from buildpack of app",
328
+ "example": "Ruby/Rack",
329
+ "serialized": true,
330
+ "type": "string"
331
+ },
332
+ "created_at": {
333
+ "description": "when app was created",
334
+ "example": "2012-01-01T12:00:00-00:00",
335
+ "serialized": true,
336
+ "type": "datetime"
337
+ },
338
+ "git_url": {
339
+ "description": "git repo URL of app",
340
+ "example": "git@heroku.com/example.git",
341
+ "serialized": true,
342
+ "type": "string"
343
+ },
344
+ "id": {
345
+ "description": "unique identifier of app",
346
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
347
+ "serialized": true,
348
+ "type": "uuid"
349
+ },
350
+ "maintenance": {
351
+ "description": "maintenance status of app",
352
+ "example": false,
353
+ "serialized": true,
354
+ "type": "boolean"
355
+ },
356
+ "name": {
357
+ "description": "unique name of app",
358
+ "example": "example",
359
+ "serialized": true,
360
+ "type": "string"
361
+ },
362
+ "owner:email": {
363
+ "description": "email address of app owner",
364
+ "example": "username@example.com",
365
+ "serialized": true,
366
+ "type": "string"
367
+ },
368
+ "owner:id": {
369
+ "description": "unique identifier of app owner",
370
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
371
+ "serialized": true,
372
+ "type": "uuid"
373
+ },
374
+ "region:id": {
375
+ "description": "unique identifier of app region",
376
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
377
+ "serialized": true,
378
+ "type": "uuid"
379
+ },
380
+ "region:name": {
381
+ "description": "name of app region",
382
+ "example": "us",
383
+ "serialized": true,
384
+ "type": "string"
385
+ },
386
+ "released_at": {
387
+ "description": "when app was last released",
388
+ "example": "2012-01-01T12:00:00-00:00",
389
+ "serialized": true,
390
+ "type": "datetime"
391
+ },
392
+ "repo_size": {
393
+ "description": "app git repo size in bytes",
394
+ "example": 1024,
395
+ "serialized": true,
396
+ "type": "number"
397
+ },
398
+ "slug_size": {
399
+ "description": "app slug size in bytes",
400
+ "example": 512,
401
+ "serialized": true,
402
+ "type": "number"
403
+ },
404
+ "stack": {
405
+ "description": "stack of app",
406
+ "example": "cedar",
407
+ "serialized": true,
408
+ "type": "string"
409
+ },
410
+ "updated_at": {
411
+ "description": "when app was updated",
412
+ "example": "2012-01-01T12:00:00-00:00",
413
+ "serialized": true,
414
+ "type": "datetime"
415
+ },
416
+ "web_url": {
417
+ "description": "web URL of app",
418
+ "example": "http://example.herokuapp.com",
419
+ "serialized": true,
420
+ "type": "string"
421
+ }
422
+ },
423
+ "description": "An app represents the program that you would like to deploy and run on Heroku."
424
+ },
425
+
426
+ "App Transfer": {
427
+ "actions": {
428
+ "Create": {
429
+ "attributes": {
430
+ "optional": [
431
+ "app:id",
432
+ "app:name",
433
+ "recipient:email",
434
+ "recipient:id"
435
+ ]
436
+ },
437
+ "method": "POST",
438
+ "path": "/app-transfers",
439
+ "statuses": [201]
440
+ },
441
+ "List": {
442
+ "method": "GET",
443
+ "path": "/app-transfers",
444
+ "statuses": [200, 206]
445
+ },
446
+ "Info": {
447
+ "method": "GET",
448
+ "path": "/app-transfers/{transfer_id}",
449
+ "statuses": [200]
450
+ },
451
+ "Update": {
452
+ "attributes": {
453
+ "required": [
454
+ "state"
455
+ ]
456
+ },
457
+ "method": "PATCH",
458
+ "path": "/app-transfers/{transfer_id}",
459
+ "statuses": [200]
460
+ },
461
+ "Delete": {
462
+ "method": "DELETE",
463
+ "path": "/app-transfers/{transfer_id}",
464
+ "statuses": [200]
465
+ }
466
+ },
467
+ "attributes": {
468
+ "created_at": {
469
+ "description": "when the transfer was created",
470
+ "example": "2012-01-01T12:00:00-00:00",
471
+ "serialized": true,
472
+ "type": "datetime"
473
+ },
474
+ "app:id": {
475
+ "description": "unique identifier of the app being transferred",
476
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
477
+ "serialized": true,
478
+ "type": "string"
479
+ },
480
+ "app:name": {
481
+ "description": "name of the app being transferred",
482
+ "example": "example",
483
+ "serialized": true,
484
+ "type": "string"
485
+ },
486
+ "id": {
487
+ "description": "unique identifier of this transfer",
488
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
489
+ "serialized": true,
490
+ "type": "uuid"
491
+ },
492
+ "owner:id": {
493
+ "description": "unique identifier of the sending user",
494
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
495
+ "serialized": true,
496
+ "type": "string"
497
+ },
498
+ "owner:email": {
499
+ "description": "email of the sending user",
500
+ "example": "username@example.com",
501
+ "serialized": true,
502
+ "type": "string"
503
+ },
504
+ "recipient:id": {
505
+ "description": "unique identifier of the receiving user",
506
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
507
+ "serialized": true,
508
+ "type": "string"
509
+ },
510
+ "recipient:email": {
511
+ "description": "email of the receiving user",
512
+ "example": "username@example.com",
513
+ "serialized": true,
514
+ "type": "string"
515
+ },
516
+ "state": {
517
+ "description": "new state of the transfer; accepted/declined/pending",
518
+ "example": "pending",
519
+ "serialized": true,
520
+ "type": "string"
521
+ },
522
+ "updated_at": {
523
+ "description": "when the transfer was updated",
524
+ "example": "2012-01-01T12:00:00-00:00",
525
+ "serialized": true,
526
+ "type": "datetime"
527
+ }
528
+ },
529
+ "description": "[Transfers](https://devcenter.heroku.com/articles/transferring-apps) allow a user to transfer ownership of their app to another user. Apps being transferred may be free or have paid resources, but if they are paid, the receiving user must have a [verified account](https://devcenter.heroku.com/articles/account-verification)."
530
+ },
531
+
532
+ "Collaborator": {
533
+ "actions": {
534
+ "Create": {
535
+ "attributes": {
536
+ "optional": [
537
+ "user:email",
538
+ "user:id"
539
+ ]
540
+ },
541
+ "method": "POST",
542
+ "path": "/apps/{app_id_or_name}/collaborators",
543
+ "statuses": [201]
544
+ },
545
+ "List": {
546
+ "method": "GET",
547
+ "path": "/apps/{app_id_or_name}/collaborators",
548
+ "statuses": [200, 206]
549
+ },
550
+ "Info": {
551
+ "method": "GET",
552
+ "path": "/apps/{app_id_or_name}/collaborators/{collaborator_id_or_email}",
553
+ "statuses": [200]
554
+ },
555
+ "Delete": {
556
+ "method": "DELETE",
557
+ "path": "/apps/{app_id_or_name}/collaborators/{collaborator_id_or_email}",
558
+ "statuses": [200]
559
+ }
560
+ },
561
+ "attributes": {
562
+ "created_at": {
563
+ "description": "when collaborator was created",
564
+ "example": "2012-01-01T12:00:00-00:00",
565
+ "serialized": true,
566
+ "type": "datetime"
567
+ },
568
+ "id": {
569
+ "description": "unique identifier of this collaborator",
570
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
571
+ "serialized": true,
572
+ "type": "uuid"
573
+ },
574
+ "updated_at": {
575
+ "description": "when collaborator was updated",
576
+ "example": "2012-01-01T12:00:00-00:00",
577
+ "serialized": true,
578
+ "type": "datetime"
579
+ },
580
+ "user:email": {
581
+ "description": "collaborator email address",
582
+ "example": "collaborator@example.com",
583
+ "serialized": true,
584
+ "type": "string"
585
+ },
586
+ "user:id": {
587
+ "description": "unique identifier of the user",
588
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
589
+ "serialized": true,
590
+ "type": "uuid"
591
+ }
592
+ },
593
+ "description": "Collaborators are other users who have been given access to an app on Heroku."
594
+ },
595
+
596
+ "Config Var": {
597
+ "actions": {
598
+ "Info": {
599
+ "method": "GET",
600
+ "path": "/apps/{app_id_or_name}/config-vars",
601
+ "serialization": {
602
+ "FOO": "bar",
603
+ "BAZ": "qux",
604
+ "QUUX": "corge"
605
+ },
606
+ "statuses": [200]
607
+ },
608
+ "Update": {
609
+ "attributes": {
610
+ "FOO": null,
611
+ "BAZ": "grault"
612
+ },
613
+ "method": "PATCH",
614
+ "path": "/apps/{app_id_or_name}/config-vars",
615
+ "serialization": {
616
+ "BAZ": "grault",
617
+ "QUUX": "corge"
618
+ },
619
+ "statuses": [200]
620
+ }
621
+ },
622
+ "attributes": {
623
+ "{key}": {
624
+ "description": "key/value pair for dyno env",
625
+ "example": "{value}",
626
+ "serialized": true,
627
+ "type": "string"
628
+ }
629
+ },
630
+ "description": "Config Vars allow you to manage the configuration information provided to an app on Heroku."
631
+ },
632
+
633
+ "Domain": {
634
+ "actions": {
635
+ "Create": {
636
+ "attributes": {
637
+ "required": [
638
+ "hostname"
639
+ ]
640
+ },
641
+ "method": "POST",
642
+ "path": "/apps/{app_id_or_name}/domains",
643
+ "statuses": [201]
644
+ },
645
+ "List": {
646
+ "method": "GET",
647
+ "path": "/apps/{app_id_or_name}/domains",
648
+ "statuses": [200, 206]
649
+ },
650
+ "Info": {
651
+ "method": "GET",
652
+ "path": "/apps/{app_id_or_name}/domains/{domain_id_or_hostname}",
653
+ "statuses": [200]
654
+ },
655
+ "Delete": {
656
+ "method": "DELETE",
657
+ "path": "/apps/{app_id_or_name}/domains/{domain_id_or_hostname}",
658
+ "statuses": [200]
659
+ }
660
+ },
661
+ "attributes": {
662
+ "created_at": {
663
+ "description": "when domain was created",
664
+ "example": "2012-01-01T12:00:00-00:00",
665
+ "serialized": true,
666
+ "type": "datetime"
667
+ },
668
+ "hostname": {
669
+ "description": "full hostname",
670
+ "example": "subdomain.example.com",
671
+ "serialized": true,
672
+ "type": "string"
673
+ },
674
+ "id": {
675
+ "description": "unique identifier of this domain",
676
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
677
+ "serialized": true,
678
+ "type": "uuid"
679
+ },
680
+ "updated_at": {
681
+ "description": "when domain was updated",
682
+ "example": "2012-01-01T12:00:00-00:00",
683
+ "serialized": true,
684
+ "type": "datetime"
685
+ }
686
+ },
687
+ "description": "Domains define what web routes should be routed to an app on Heroku."
688
+ },
689
+
690
+ "Dyno": {
691
+ "actions": {
692
+ "Create": {
693
+ "attributes": {
694
+ "optional": [
695
+ "attach",
696
+ "size"
697
+ ],
698
+ "required": [
699
+ "command"
700
+ ]
701
+ },
702
+ "method": "POST",
703
+ "path": "/apps/{app_id_or_name}/dynos",
704
+ "statuses": [201]
705
+ },
706
+ "List": {
707
+ "method": "GET",
708
+ "path": "/apps/{app_id_or_name}/dynos",
709
+ "statuses": [200, 206]
710
+ },
711
+ "Info": {
712
+ "method": "GET",
713
+ "path": "/apps/{app_id_or_name}/dynos/{dyno_id_or_name}",
714
+ "statuses": [200]
715
+ },
716
+ "Delete": {
717
+ "method": "DELETE",
718
+ "path": "/apps/{app_id_or_name}/dynos/{dyno_id_or_name}",
719
+ "statuses": [200]
720
+ }
721
+ },
722
+ "attributes": {
723
+ "attach": {
724
+ "description": "whether to stream output or not",
725
+ "example": true,
726
+ "serialized": false,
727
+ "type": "boolean"
728
+ },
729
+ "attach_url": {
730
+ "description": "a URL to stream output from for attached processes or null for non-attached processes",
731
+ "example": "rendezvous://rendezvous.runtime.heroku.com:5000/{rendezvous-id}",
732
+ "serialized": true,
733
+ "type": "string"
734
+ },
735
+ "command": {
736
+ "description": "command used to start this process",
737
+ "example": "bash",
738
+ "serialized": true,
739
+ "type": "string"
740
+ },
741
+ "created_at": {
742
+ "description": "when domain was created",
743
+ "example": "2012-01-01T12:00:00-00:00",
744
+ "serialized": true,
745
+ "type": "datetime"
746
+ },
747
+ "id": {
748
+ "description": "unique identifier of this dyno",
749
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
750
+ "serialized": true,
751
+ "type": "uuid"
752
+ },
753
+ "name": {
754
+ "description": "the name of this process on this app",
755
+ "example": "run.1",
756
+ "serialized": true,
757
+ "type": "string"
758
+ },
759
+ "release:id": {
760
+ "description": "the unique identifier of the release this process was started with",
761
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
762
+ "serialized": true,
763
+ "type": "uuid"
764
+ },
765
+ "release:name": {
766
+ "description": "the name of the release this process was started with",
767
+ "example": "v123",
768
+ "serialized": true,
769
+ "type": "string"
770
+ },
771
+ "size": {
772
+ "description": "dyno size (default: 1)",
773
+ "example": 1,
774
+ "serialized": true,
775
+ "type": "number"
776
+ },
777
+ "state": {
778
+ "description": "current status of process (either: crashed, down, idle, starting, or up)",
779
+ "example": "up",
780
+ "serialized": true,
781
+ "type": "string"
782
+ },
783
+ "type": {
784
+ "description": "type of process",
785
+ "example": "run",
786
+ "serialized": true,
787
+ "type": "string"
788
+ },
789
+ "updated_at": {
790
+ "description": "when process last changed state",
791
+ "example": "2012-01-01T12:00:00-00:00",
792
+ "serialized": true,
793
+ "type": "datetime"
794
+ }
795
+ },
796
+ "description": "Dynos encapsulate running processes of an app on Heroku."
797
+ },
798
+
799
+ "Formation": {
800
+ "actions": {
801
+ "List": {
802
+ "method": "GET",
803
+ "path": "/apps/{app_id_or_name}/formation",
804
+ "statuses": [200, 206]
805
+ },
806
+ "Info": {
807
+ "method": "GET",
808
+ "path": "/apps/{app_id_or_name}/formation/{formation_id_or_type}",
809
+ "statuses": [200]
810
+ },
811
+ "Update": {
812
+ "attributes": {
813
+ "optional": [
814
+ "quantity",
815
+ "size"
816
+ ]
817
+ },
818
+ "method": "PATCH",
819
+ "path": "/apps/{app_id_or_name}/formation/{formation_id_or_type}",
820
+ "statuses": [200]
821
+ }
822
+ },
823
+ "attributes": {
824
+ "command": {
825
+ "description": "command to use for process type",
826
+ "example": "bundle exec rails server -p $PORT",
827
+ "serialized": true,
828
+ "type": "string"
829
+ },
830
+ "created_at": {
831
+ "description": "when domain was created",
832
+ "example": "2012-01-01T12:00:00-00:00",
833
+ "serialized": true,
834
+ "type": "datetime"
835
+ },
836
+ "id": {
837
+ "description": "unique identifier of this process type",
838
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
839
+ "serialized": true,
840
+ "type": "uuid"
841
+ },
842
+ "quantity": {
843
+ "description": "number of processes to maintain",
844
+ "example": 1,
845
+ "serialized": true,
846
+ "type": "number"
847
+ },
848
+ "size": {
849
+ "description": "dyno size (default: 1)",
850
+ "example": 1,
851
+ "serialized": true,
852
+ "type": "number"
853
+ },
854
+ "type": {
855
+ "description": "type of process to maintain",
856
+ "example": "web",
857
+ "serialized": true,
858
+ "type": "string"
859
+ },
860
+ "updated_at": {
861
+ "description": "when dyno type was updated",
862
+ "example": "2012-01-01T12:00:00-00:00",
863
+ "serialized": true,
864
+ "type": "datetime"
865
+ }
866
+ },
867
+ "description": "The formation of processes that should be maintained for your application. Commands and types are defined by the Procfile uploaded with an app."
868
+ },
869
+
870
+ "Key": {
871
+ "actions": {
872
+ "Create": {
873
+ "attributes": {
874
+ "required": [
875
+ "public_key"
876
+ ]
877
+ },
878
+ "method": "POST",
879
+ "path": "/account/keys",
880
+ "statuses": [201]
881
+ },
882
+ "List": {
883
+ "method": "GET",
884
+ "path": "/account/keys",
885
+ "statuses": [200]
886
+ },
887
+ "Info": {
888
+ "method": "GET",
889
+ "path": "/account/keys/{key_id_or_fingerprint}",
890
+ "statuses": [200]
891
+ },
892
+ "Delete": {
893
+ "method": "DELETE",
894
+ "path": "/account/keys/{key_id_or_fingerprint}",
895
+ "statuses": [200]
896
+ }
897
+ },
898
+ "attributes": {
899
+ "created_at": {
900
+ "description": "when key was created",
901
+ "example": "2012-01-01T12:00:00-00:00",
902
+ "serialized": true,
903
+ "type": "datetime"
904
+ },
905
+ "email": {
906
+ "description": "email address provided in key contents",
907
+ "example": "username@example.com",
908
+ "serialized": true,
909
+ "type": "string"
910
+ },
911
+ "fingerprint": {
912
+ "description": "a unique identifying string based on contents",
913
+ "example": "17:63:a4:ba:24:d3:7f:af:17:c8:94:82:7e:80:56:bf",
914
+ "serialized": true,
915
+ "type": "string"
916
+ },
917
+ "id": {
918
+ "description": "unique identifier of this key",
919
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
920
+ "serialized": true,
921
+ "type": "uuid"
922
+ },
923
+ "public_key": {
924
+ "description": "full public_key as uploaded",
925
+ "example": "ssh-rsa AAAAB3NzaC1ycVc/../839Uv username@example.com",
926
+ "serialized": true,
927
+ "type": "string"
928
+ },
929
+ "updated_at": {
930
+ "description": "when key was updated",
931
+ "example": "2012-01-01T12:00:00-00:00",
932
+ "serialized": true,
933
+ "type": "datetime"
934
+ }
935
+ },
936
+ "description": "Keys represent public SSH keys associated with an account and are used to authorize users as they are performing git operations."
937
+ },
938
+
939
+ "Log Drain": {
940
+ "actions": {
941
+ "Create": {
942
+ "attributes": {
943
+ "required": [
944
+ "url"
945
+ ]
946
+ },
947
+ "method": "POST",
948
+ "path": "/apps/{app_id_or_name}/log-drains",
949
+ "statuses": [201]
950
+ },
951
+ "List": {
952
+ "method": "GET",
953
+ "path": "/apps/{app_id_or_name}/log-drains",
954
+ "statuses": [200]
955
+ },
956
+ "Info": {
957
+ "method": "GET",
958
+ "path": "/apps/{app_id_or_name}/log-drains/{drain_id_or_url}",
959
+ "statuses": [200]
960
+ },
961
+ "Delete": {
962
+ "method": "DELETE",
963
+ "path": "/apps/{app_id_or_name}/log-drains/{drain_id_or_url}",
964
+ "statuses": [200]
965
+ }
966
+ },
967
+ "attributes": {
968
+ "addon:id": {
969
+ "description": "unique identifier of the addon that provides the drain",
970
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
971
+ "serialized": true,
972
+ "type": "uuid"
973
+ },
974
+ "created_at": {
975
+ "description": "when log drain was created",
976
+ "example": "2012-01-01T12:00:00-00:00",
977
+ "serialized": true,
978
+ "type": "datetime"
979
+ },
980
+ "id": {
981
+ "description": "unique identifier of this log drain",
982
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
983
+ "serialized": true,
984
+ "type": "uuid"
985
+ },
986
+ "updated_at": {
987
+ "description": "when log session was updated",
988
+ "example": "2012-01-01T12:00:00-00:00",
989
+ "serialized": true,
990
+ "type": "datetime"
991
+ },
992
+ "url": {
993
+ "description": "url associated with the log drain",
994
+ "example": "https://example.com/drain",
995
+ "serialized": true,
996
+ "type": "string"
997
+ }
998
+ },
999
+ "description": "[Log drains](https://devcenter.heroku.com/articles/logging#syslog-drains) provide a way to forward your Heroku logs to an external syslog server for long-term archiving. This external service must be configured to receive syslog packets from Heroku, whereupon its URL can be added to an app using this API."
1000
+ },
1001
+
1002
+ "Log Session": {
1003
+ "actions": {
1004
+ "Create": {
1005
+ "attributes": {
1006
+ "optional": [
1007
+ "dyno",
1008
+ "lines",
1009
+ "source",
1010
+ "tail"
1011
+ ]
1012
+ },
1013
+ "method": "POST",
1014
+ "path": "/apps/{app_id_or_name}/log-sessions",
1015
+ "statuses": [201]
1016
+ }
1017
+ },
1018
+ "attributes": {
1019
+ "created_at": {
1020
+ "description": "when log connection was created",
1021
+ "example": "2012-01-01T12:00:00-00:00",
1022
+ "serialized": true,
1023
+ "type": "datetime"
1024
+ },
1025
+ "dyno": {
1026
+ "description": "dyno to limit results to",
1027
+ "example": "web.1",
1028
+ "serialized": false,
1029
+ "type": "string"
1030
+ },
1031
+ "id": {
1032
+ "description": "unique identifier of this log session",
1033
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1034
+ "serialized": true,
1035
+ "type": "uuid"
1036
+ },
1037
+ "lines": {
1038
+ "description": "number of log lines to stream at once",
1039
+ "example": 10,
1040
+ "serialized": false,
1041
+ "type": "number"
1042
+ },
1043
+ "logplex_url": {
1044
+ "description": "URL for log streaming session",
1045
+ "example": "https://logplex.heroku.com/sessions/01234567-89ab-cdef-0123-456789abcdef?srv=1325419200",
1046
+ "serialized": true,
1047
+ "type": "string"
1048
+ },
1049
+ "source": {
1050
+ "description": "log source to limit results to",
1051
+ "example": "app",
1052
+ "serialized": false,
1053
+ "type": "string"
1054
+ },
1055
+ "tail": {
1056
+ "description": "whether to stream ongoing logs",
1057
+ "example": true,
1058
+ "serialized": false,
1059
+ "type": "boolean"
1060
+ },
1061
+ "updated_at": {
1062
+ "description": "when log session was updated",
1063
+ "example": "2012-01-01T12:00:00-00:00",
1064
+ "serialized": true,
1065
+ "type": "datetime"
1066
+ }
1067
+ },
1068
+ "description": "Log sessions provide a URL to stream data from your app logs. Streaming is performed by doing an HTTP GET method on the provided Logplex URL and then repeatedly reading from the socket. Sessions remain available for about 5 minutes after creation or about one hour after connecting. For continuous access to an app's log, you should set up a [log drain](https://devcenter.heroku.com/articles/logging#syslog-drains)."
1069
+ },
1070
+
1071
+ "OAuth Authorization": {
1072
+ "actions": {
1073
+ "Create": {
1074
+ "attributes": {
1075
+ "optional": [
1076
+ "client:id",
1077
+ "description"
1078
+ ],
1079
+ "required": [
1080
+ "scope"
1081
+ ]
1082
+ },
1083
+ "method": "POST",
1084
+ "path": "/oauth/authorizations",
1085
+ "statuses": [201]
1086
+ },
1087
+ "List": {
1088
+ "method": "GET",
1089
+ "path": "/oauth/authorizations",
1090
+ "statuses": [200, 206]
1091
+ },
1092
+ "Info": {
1093
+ "method": "GET",
1094
+ "path": "/oauth/authorizations/{authorization_id}",
1095
+ "statuses": [200]
1096
+ },
1097
+ "Delete": {
1098
+ "method": "DELETE",
1099
+ "path": "/oauth/authorizations/{authorization_id}",
1100
+ "statuses": [200]
1101
+ }
1102
+ },
1103
+ "attributes": {
1104
+ "access_token:expires_in": {
1105
+ "description": "date in which this OAuth access token is no longer valid",
1106
+ "example": "2012-01-01T12:00:00-00:00",
1107
+ "serialized": true,
1108
+ "type": "datetime"
1109
+ },
1110
+ "access_token:id": {
1111
+ "description": "unique identifier of this authorization's OAuth access token",
1112
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1113
+ "serialized": true,
1114
+ "type": "uuid"
1115
+ },
1116
+ "access_token:token": {
1117
+ "description": "the actual OAuth access token",
1118
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1119
+ "serialized": true,
1120
+ "type": "string"
1121
+ },
1122
+ "client:id": {
1123
+ "description": "unique identifier of this OAuth authorization client",
1124
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1125
+ "serialized": true,
1126
+ "type": "uuid"
1127
+ },
1128
+ "client:name": {
1129
+ "description": "OAuth authorization client name",
1130
+ "example": "example",
1131
+ "serialized": true,
1132
+ "type": "string"
1133
+ },
1134
+ "client:redirect_uri": {
1135
+ "description": "endpoint for redirection after authorization with OAuth authorization client",
1136
+ "example": "https://example.com/auth/heroku/callback",
1137
+ "serialized": true,
1138
+ "type": "string"
1139
+ },
1140
+ "created_at": {
1141
+ "description": "when OAuth authorization was created",
1142
+ "example": "2012-01-01T12:00:00-00:00",
1143
+ "serialized": true,
1144
+ "type": "datetime"
1145
+ },
1146
+ "description": {
1147
+ "description": "human-friendly description of this OAuth authorization",
1148
+ "example": "sample authorization",
1149
+ "serialized": true,
1150
+ "type": "string"
1151
+ },
1152
+ "grant:code": {
1153
+ "description": "code for the OAuth authorization grant",
1154
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1155
+ "serialized": true,
1156
+ "type": "string"
1157
+ },
1158
+ "grant:expires_in": {
1159
+ "description": "date in which this authorization grant is no longer valid",
1160
+ "example": "2012-01-01T12:00:00-00:00",
1161
+ "serialized": true,
1162
+ "type": "datetime"
1163
+ },
1164
+ "grant:id": {
1165
+ "description": "unique identifier for this authorization's grant",
1166
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1167
+ "serialized": true,
1168
+ "type": "uuid"
1169
+ },
1170
+ "id": {
1171
+ "description": "unique identifier of OAuth authorization",
1172
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1173
+ "serialized": true,
1174
+ "type": "uuid"
1175
+ },
1176
+ "refresh_token:expires_in": {
1177
+ "description": "date in which this OAuth refresh token is no longer valid",
1178
+ "example": "2012-01-01T12:00:00-00:00",
1179
+ "serialized": true,
1180
+ "type": "datetime"
1181
+ },
1182
+ "refresh_token:id": {
1183
+ "description": "unique identifier of this authorization's OAuth refresh token",
1184
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1185
+ "serialized": true,
1186
+ "type": "uuid"
1187
+ },
1188
+ "refresh_token:token": {
1189
+ "description": "the actual OAuth refresh token",
1190
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1191
+ "serialized": true,
1192
+ "type": "string"
1193
+ },
1194
+ "scope": {
1195
+ "description": "The scope of access OAuth authorization allows",
1196
+ "example": "global",
1197
+ "serialized": true,
1198
+ "type": "string"
1199
+ },
1200
+ "updated_at": {
1201
+ "description": "when OAuth authorization was updated",
1202
+ "example": "2012-01-01T12:00:00-00:00",
1203
+ "serialized": true,
1204
+ "type": "datetime"
1205
+ }
1206
+ },
1207
+ "description": "OAuth authorizations represent clients that a Heroku user has authorized to automate, customize or extend their usage of the platform. For more information please refer to the [Heroku OAuth documentation](https://devcenter.heroku.com/articles/oauth)"
1208
+ },
1209
+
1210
+ "OAuth Client": {
1211
+ "actions": {
1212
+ "Create": {
1213
+ "attributes": {
1214
+ "required": [
1215
+ "name",
1216
+ "redirect_uri"
1217
+ ]
1218
+ },
1219
+ "method": "POST",
1220
+ "path": "/oauth/clients",
1221
+ "statuses": [201]
1222
+ },
1223
+ "List": {
1224
+ "method": "GET",
1225
+ "path": "/oauth/clients",
1226
+ "statuses": [200, 206]
1227
+ },
1228
+ "Info": {
1229
+ "method": "GET",
1230
+ "path": "/oauth/clients/{client_id}",
1231
+ "statuses": [200]
1232
+ },
1233
+ "Update": {
1234
+ "attributes": {
1235
+ "optional": [
1236
+ "name",
1237
+ "redirect_uri"
1238
+ ]
1239
+ },
1240
+ "method": "PATCH",
1241
+ "path": "/oauth/clients/{client_id}",
1242
+ "statuses": [200]
1243
+ },
1244
+ "Delete": {
1245
+ "method": "DELETE",
1246
+ "path": "/oauth/clients/{client_id}",
1247
+ "statuses": [200]
1248
+ }
1249
+ },
1250
+ "attributes": {
1251
+ "created_at": {
1252
+ "description": "when OAuth client was created",
1253
+ "example": "2012-01-01T12:00:00-00:00",
1254
+ "serialized": true,
1255
+ "type": "datetime"
1256
+ },
1257
+ "id": {
1258
+ "description": "unique identifier of this OAuth client",
1259
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1260
+ "serialized": true,
1261
+ "type": "uuid"
1262
+ },
1263
+ "name": {
1264
+ "description": "OAuth client name",
1265
+ "example": "example",
1266
+ "serialized": true,
1267
+ "type": "string"
1268
+ },
1269
+ "redirect_uri": {
1270
+ "description": "endpoint for redirection after authorization with OAuth client",
1271
+ "example": "https://example.com/auth/heroku/callback",
1272
+ "serialized": true,
1273
+ "type": "string"
1274
+ },
1275
+ "secret": {
1276
+ "description": "secret used to obtain OAuth authorizations under this client",
1277
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1278
+ "serialized": true,
1279
+ "type": "string"
1280
+ },
1281
+ "updated_at": {
1282
+ "description": "when OAuth client was updated",
1283
+ "example": "2012-01-01T12:00:00-00:00",
1284
+ "serialized": true,
1285
+ "type": "datetime"
1286
+ }
1287
+ },
1288
+ "description": "OAuth clients are applications that Heroku users can authorize to automate, customize or extend their usage of the platform. For more information please refer to the [Heroku OAuth documentation](https://devcenter.heroku.com/articles/oauth)"
1289
+ },
1290
+
1291
+ "OAuth Token": {
1292
+ "actions": {
1293
+ "Create": {
1294
+ "attributes": {
1295
+ "optional": [
1296
+ "client:secret",
1297
+ "grant:code",
1298
+ "refresh_token:token"
1299
+ ],
1300
+ "required": [
1301
+ "grant:type"
1302
+ ]
1303
+ },
1304
+ "method": "POST",
1305
+ "path": "/oauth/tokens",
1306
+ "statuses": [201]
1307
+ }
1308
+ },
1309
+ "attributes": {
1310
+ "authorization:id": {
1311
+ "description": "unique identifier of OAuth token authorization",
1312
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1313
+ "serialized": true,
1314
+ "type": "uuid"
1315
+ },
1316
+ "access_token:expires_in": {
1317
+ "description": "seconds until OAuth access token expires",
1318
+ "example": 2592000,
1319
+ "serialized": true,
1320
+ "type": "number"
1321
+ },
1322
+ "access_token:id": {
1323
+ "description": "unique identifier of OAuth access token",
1324
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1325
+ "serialized": true,
1326
+ "type": "uuid"
1327
+ },
1328
+ "access_token:token": {
1329
+ "description": "content of OAuth access token",
1330
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1331
+ "serialized": true,
1332
+ "type": "string"
1333
+ },
1334
+ "client:secret": {
1335
+ "description": "OAuth client secret used to obtain token",
1336
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1337
+ "serialized": false,
1338
+ "type": "string"
1339
+ },
1340
+ "created_at": {
1341
+ "description": "when OAuth token was created",
1342
+ "example": "2012-01-01T12:00:00-00:00",
1343
+ "serialized": true,
1344
+ "type": "datetime"
1345
+ },
1346
+ "grant:code": {
1347
+ "description": "grant code recieved from OAuth web application authorization",
1348
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1349
+ "serialized": false,
1350
+ "type": "string"
1351
+ },
1352
+ "grant:type": {
1353
+ "description": "type of grant requested, one of `authorization_code` or `refresh_token`",
1354
+ "example": "authorization_code",
1355
+ "serialized": false,
1356
+ "type": "string"
1357
+ },
1358
+ "id": {
1359
+ "description": "unique identifier of OAuth token",
1360
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1361
+ "serialized": true,
1362
+ "type": "uuid"
1363
+ },
1364
+ "refresh_token:expires_in": {
1365
+ "description": "seconds until OAuth refresh token expires",
1366
+ "example": 2592000,
1367
+ "serialized": true,
1368
+ "type": "number"
1369
+ },
1370
+ "refresh_token:id": {
1371
+ "description": "unique identifier of OAuth refresh token",
1372
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1373
+ "serialized": true,
1374
+ "type": "uuid"
1375
+ },
1376
+ "refresh_token:token": {
1377
+ "description": "content of OAuth refresh token",
1378
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1379
+ "serialized": true,
1380
+ "type": "string"
1381
+ },
1382
+ "session:id": {
1383
+ "description": "unique identifier of OAuth token session",
1384
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1385
+ "serialized": true,
1386
+ "type": "string"
1387
+ },
1388
+ "updated_at": {
1389
+ "description": "when OAuth token was updated",
1390
+ "example": "2012-01-01T12:00:00-00:00",
1391
+ "serialized": true,
1392
+ "type": "datetime"
1393
+ }
1394
+ },
1395
+ "description": "OAuth tokens provide access for authorized clients to act on behalf of a Heroku user to automate, customize or extend their usage of the platform. For more information please refer to the [Heroku OAuth documentation](https://devcenter.heroku.com/articles/oauth)"
1396
+ },
1397
+
1398
+ "Plan": {
1399
+ "actions": {
1400
+ "List": {
1401
+ "method": "GET",
1402
+ "path": "/addon-services/{addon_service_id_or_name}/plans",
1403
+ "statuses": [200, 206]
1404
+ },
1405
+ "Info": {
1406
+ "method": "GET",
1407
+ "path": "/addon-services/{addon_service_id_or_name}/plans/{plan_id_or_name}",
1408
+ "statuses": [200]
1409
+ }
1410
+ },
1411
+ "attributes": {
1412
+ "created_at": {
1413
+ "description": "when plan was created",
1414
+ "example": "2012-01-01T12:00:00-00:00",
1415
+ "serialized": true,
1416
+ "type": "datetime"
1417
+ },
1418
+ "description": {
1419
+ "description": "description of plan",
1420
+ "example": "Heroku Postgres Dev",
1421
+ "serialized": true,
1422
+ "type": "string"
1423
+ },
1424
+ "id": {
1425
+ "description": "unique identifier of plan",
1426
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1427
+ "serialized": true,
1428
+ "type": "uuid"
1429
+ },
1430
+ "name": {
1431
+ "description": "unique name for plan",
1432
+ "example": "heroku-postgresql:dev",
1433
+ "serialized": true,
1434
+ "type": "string"
1435
+ },
1436
+ "price:cents": {
1437
+ "description": "price in cents per unit of plan",
1438
+ "example": 0,
1439
+ "serialized": true,
1440
+ "type": "number"
1441
+ },
1442
+ "price:unit": {
1443
+ "description": "unit of price for plan",
1444
+ "example": "month",
1445
+ "serialized": true,
1446
+ "type": "string"
1447
+ },
1448
+ "state": {
1449
+ "description": "release status for plan",
1450
+ "example": "public",
1451
+ "serialized": true,
1452
+ "type": "string"
1453
+ },
1454
+ "updated_at": {
1455
+ "description": "when plan was updated",
1456
+ "example": "2012-01-01T12:00:00-00:00",
1457
+ "serialized": true,
1458
+ "type": "datetime"
1459
+ }
1460
+ },
1461
+ "description": "Plans represent different configurations of add-ons that may be added to apps."
1462
+ },
1463
+
1464
+ "Region": {
1465
+ "actions": {
1466
+ "List": {
1467
+ "method": "GET",
1468
+ "path": "/regions",
1469
+ "statuses": [200, 206]
1470
+ },
1471
+ "Info": {
1472
+ "method": "GET",
1473
+ "path": "/regions/{region_id_or_name}",
1474
+ "statuses": [200]
1475
+ }
1476
+ },
1477
+ "attributes": {
1478
+ "created_at": {
1479
+ "description": "when region was created",
1480
+ "example": "2012-01-01T12:00:00-00:00",
1481
+ "serialized": true,
1482
+ "type": "datetime"
1483
+ },
1484
+ "description": {
1485
+ "description": "description of the region",
1486
+ "example": "United States",
1487
+ "serialized": true,
1488
+ "type": "string"
1489
+ },
1490
+ "id": {
1491
+ "description": "unique identifier of this region",
1492
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1493
+ "serialized": true,
1494
+ "type": "uuid"
1495
+ },
1496
+ "name": {
1497
+ "description": "unique name of the region",
1498
+ "example": "us",
1499
+ "serialized": true,
1500
+ "type": "string"
1501
+ },
1502
+ "updated_at": {
1503
+ "description": "when region was updated",
1504
+ "example": "2012-01-01T12:00:00-00:00",
1505
+ "serialized": true,
1506
+ "type": "datetime"
1507
+ }
1508
+ },
1509
+ "description": "Regions represent geographic locations in which your application may run."
1510
+ },
1511
+
1512
+ "Release": {
1513
+ "actions": {
1514
+ "List": {
1515
+ "method": "GET",
1516
+ "path": "/apps/{app_id_or_name}/releases",
1517
+ "statuses": [200, 206]
1518
+ },
1519
+ "Info": {
1520
+ "method": "GET",
1521
+ "path": "/apps/{app_id_or_name}/releases/{release_id_or_name}",
1522
+ "statuses": [200]
1523
+ }
1524
+ },
1525
+ "attributes": {
1526
+ "created_at": {
1527
+ "description": "when release was created",
1528
+ "example": "2012-01-01T12:00:00-00:00",
1529
+ "serialized": true,
1530
+ "type": "datetime"
1531
+ },
1532
+ "description": {
1533
+ "description": "description of changes in this release",
1534
+ "example": "Added new feature",
1535
+ "serialized": true,
1536
+ "type": "string"
1537
+ },
1538
+ "id": {
1539
+ "description": "unique identifier of this release",
1540
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1541
+ "serialized": true,
1542
+ "type": "uuid"
1543
+ },
1544
+ "updated_at": {
1545
+ "description": "when region was updated",
1546
+ "example": "2012-01-01T12:00:00-00:00",
1547
+ "serialized": true,
1548
+ "type": "datetime"
1549
+ },
1550
+ "user:email": {
1551
+ "description": "email address of user that created the release",
1552
+ "example": "username@example.com",
1553
+ "serialized": true,
1554
+ "type": "string"
1555
+ },
1556
+ "user:id": {
1557
+ "description": "unique identifier of the user that created the release",
1558
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
1559
+ "serialized": true,
1560
+ "type": "uuid"
1561
+ },
1562
+ "version": {
1563
+ "description": "unique version assigned to the release",
1564
+ "example": 456,
1565
+ "serialized": true,
1566
+ "type": "number"
1567
+ }
1568
+ },
1569
+ "description": "A release represents a combination of code, config vars and add-ons for an app on Heroku."
1570
+ }
1571
+
1572
+ }
1573
+ }