├── .about.yml ├── LICENSE.md ├── README.md ├── _config.yml ├── _includes ├── index.md └── sidebar.html ├── _layouts ├── default.html ├── page.html └── post.html ├── assets ├── css │ ├── main.css │ ├── normalize.css │ └── syntax.css ├── img │ ├── 18f-logo.png │ └── octocat.png └── js │ └── respond.min.js ├── index.html └── pages ├── 18f-manual.md ├── agency-api.md ├── agency-manual.md ├── api-analytics.md ├── contact.md ├── developer-hub.md ├── engagement.md ├── process.md ├── project-outline.md ├── project-timeline.md ├── sow.md └── training.md /.about.yml: -------------------------------------------------------------------------------- 1 | --- 2 | project: "API Program" 3 | name: api-program 4 | github: 5 | - 18F/api-program 6 | - 18F/autoapi 7 | description: A simple, reproducable API program in a bo. 8 | partners: 9 | - General Services Administration 10 | stage: discovery 11 | milestones: 12 | - 'May 2015: API Program chosen for seed funding' 13 | contact: 14 | - gray.brooks@gsa.gov 15 | stack: jekyll, python 16 | team: gray, joshcarp 17 | licenses: 18 | api-program: Public Domain (CC0) 19 | links: 20 | - https://pages.18f.gov/api-program/ 21 | - https://autoapi.18f.gov/ 22 | status: 23 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | CC0 1.0 Universal 2 | 3 | Statement of Purpose 4 | 5 | The laws of most jurisdictions throughout the world automatically confer 6 | exclusive Copyright and Related Rights (defined below) upon the creator and 7 | subsequent owner(s) (each and all, an "owner") of an original work of 8 | authorship and/or a database (each, a "Work"). 9 | 10 | Certain owners wish to permanently relinquish those rights to a Work for the 11 | purpose of contributing to a commons of creative, cultural and scientific 12 | works ("Commons") that the public can reliably and without fear of later 13 | claims of infringement build upon, modify, incorporate in other works, reuse 14 | and redistribute as freely as possible in any form whatsoever and for any 15 | purposes, including without limitation commercial purposes. These owners may 16 | contribute to the Commons to promote the ideal of a free culture and the 17 | further production of creative, cultural and scientific works, or to gain 18 | reputation or greater distribution for their Work in part through the use and 19 | efforts of others. 20 | 21 | For these and/or other purposes and motivations, and without any expectation 22 | of additional consideration or compensation, the person associating CC0 with a 23 | Work (the "Affirmer"), to the extent that he or she is an owner of Copyright 24 | and Related Rights in the Work, voluntarily elects to apply CC0 to the Work 25 | and publicly distribute the Work under its terms, with knowledge of his or her 26 | Copyright and Related Rights in the Work and the meaning and intended legal 27 | effect of CC0 on those rights. 28 | 29 | 1. Copyright and Related Rights. A Work made available under CC0 may be 30 | protected by copyright and related or neighboring rights ("Copyright and 31 | Related Rights"). Copyright and Related Rights include, but are not limited 32 | to, the following: 33 | 34 | i. the right to reproduce, adapt, distribute, perform, display, communicate, 35 | and translate a Work; 36 | 37 | ii. moral rights retained by the original author(s) and/or performer(s); 38 | 39 | iii. publicity and privacy rights pertaining to a person's image or likeness 40 | depicted in a Work; 41 | 42 | iv. rights protecting against unfair competition in regards to a Work, 43 | subject to the limitations in paragraph 4(a), below; 44 | 45 | v. rights protecting the extraction, dissemination, use and reuse of data in 46 | a Work; 47 | 48 | vi. database rights (such as those arising under Directive 96/9/EC of the 49 | European Parliament and of the Council of 11 March 1996 on the legal 50 | protection of databases, and under any national implementation thereof, 51 | including any amended or successor version of such directive); and 52 | 53 | vii. other similar, equivalent or corresponding rights throughout the world 54 | based on applicable law or treaty, and any national implementations thereof. 55 | 56 | 2. Waiver. To the greatest extent permitted by, but not in contravention of, 57 | applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and 58 | unconditionally waives, abandons, and surrenders all of Affirmer's Copyright 59 | and Related Rights and associated claims and causes of action, whether now 60 | known or unknown (including existing as well as future claims and causes of 61 | action), in the Work (i) in all territories worldwide, (ii) for the maximum 62 | duration provided by applicable law or treaty (including future time 63 | extensions), (iii) in any current or future medium and for any number of 64 | copies, and (iv) for any purpose whatsoever, including without limitation 65 | commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes 66 | the Waiver for the benefit of each member of the public at large and to the 67 | detriment of Affirmer's heirs and successors, fully intending that such Waiver 68 | shall not be subject to revocation, rescission, cancellation, termination, or 69 | any other legal or equitable action to disrupt the quiet enjoyment of the Work 70 | by the public as contemplated by Affirmer's express Statement of Purpose. 71 | 72 | 3. Public License Fallback. Should any part of the Waiver for any reason be 73 | judged legally invalid or ineffective under applicable law, then the Waiver 74 | shall be preserved to the maximum extent permitted taking into account 75 | Affirmer's express Statement of Purpose. In addition, to the extent the Waiver 76 | is so judged Affirmer hereby grants to each affected person a royalty-free, 77 | non transferable, non sublicensable, non exclusive, irrevocable and 78 | unconditional license to exercise Affirmer's Copyright and Related Rights in 79 | the Work (i) in all territories worldwide, (ii) for the maximum duration 80 | provided by applicable law or treaty (including future time extensions), (iii) 81 | in any current or future medium and for any number of copies, and (iv) for any 82 | purpose whatsoever, including without limitation commercial, advertising or 83 | promotional purposes (the "License"). The License shall be deemed effective as 84 | of the date CC0 was applied by Affirmer to the Work. Should any part of the 85 | License for any reason be judged legally invalid or ineffective under 86 | applicable law, such partial invalidity or ineffectiveness shall not 87 | invalidate the remainder of the License, and in such case Affirmer hereby 88 | affirms that he or she will not (i) exercise any of his or her remaining 89 | Copyright and Related Rights in the Work or (ii) assert any associated claims 90 | and causes of action with respect to the Work, in either case contrary to 91 | Affirmer's express Statement of Purpose. 92 | 93 | 4. Limitations and Disclaimers. 94 | 95 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 96 | surrendered, licensed or otherwise affected by this document. 97 | 98 | b. Affirmer offers the Work as-is and makes no representations or warranties 99 | of any kind concerning the Work, express, implied, statutory or otherwise, 100 | including without limitation warranties of title, merchantability, fitness 101 | for a particular purpose, non infringement, or the absence of latent or 102 | other defects, accuracy, or the present or absence of errors, whether or not 103 | discoverable, all to the greatest extent permissible under applicable law. 104 | 105 | c. Affirmer disclaims responsibility for clearing rights of other persons 106 | that may apply to the Work or any use thereof, including without limitation 107 | any person's Copyright and Related Rights in the Work. Further, Affirmer 108 | disclaims responsibility for obtaining any necessary consents, permissions 109 | or other rights required for any use of the Work. 110 | 111 | d. Affirmer understands and acknowledges that Creative Commons is not a 112 | party to this document and has no duty or obligation with respect to this 113 | CC0 or use of the Work. 114 | 115 | For more information, please see 116 | 117 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # [18F API Program](https://pages.18f.gov/api-program/) 3 | 4 | ## What is it? 5 | The 18F API Program is designed to expedite the ability for agencies to launch their own [Application Programming Interfaces] (http://www.computerworld.com/article/2593623/app-development/application-programming-interface.html), or APIs. APIs enable developers to request and exchange data with your agency. They provide an easier way for different applications and services to speak to one another through the exchange of information. A good API will enable your agency to in turn provide better data and services to the American people through a variety of uses and applications. 6 | 7 | Unsupported, it is not uncommon for an agency to spend years launching a succesful program. 8 | 9 | ## What can it do for my agency? 10 | Participation in the program provides the following benefits: 11 | * Jumpstarting a new agency API program; 12 | * Provide a way for agencies to begin using their own APIs (known as 'dogfooding'); and 13 | * Learn how to put data to work for you using API analytics. 14 | 15 | ## Is this program right for me? 16 | Small, medium, and large agencies, as well as medium and large individual teams within agencies would be fit candidates. Even among agencies with first or second generation API programs already in existence, the capacity has often not been scaled out to be a ready resource for all teams. The API Program provides such an easily launched capacity that multiple teams within one agency could legitimately want to onboard their own instance to maximize convenience and customization. 17 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Base configuration 2 | permalink: /:title 3 | exclude: [".rvmrc", ".rbenv-version", "README.md", "Rakefile", "changelog.md"] 4 | markdown: kramdown 5 | pygments: true 6 | 7 | # Title 8 | name: API Program 9 | subtitle: A comprehensive solution for agencies. 10 | 11 | # When using this template with a project page set the baseurl to '/project-name' 12 | # For user/organization pages set this to an empty string 13 | # When working locally use jekyll serve --baseurl '' so that you can view everything at localhost:4000 14 | # See http://jekyllrb.com/docs/github-pages/ for more info 15 | #baseurl: '' 16 | baseurl: '/api-program' 17 | 18 | # Author/Organization info to be displayed in the templates 19 | author: 20 | name: 18F 21 | url: https://18f.gsa.gov 22 | 23 | # Point the logo URL at a file in your repo or hosted elsewhere by your organization 24 | logourl: https://pages.18f.gov/api-program/assets/img/18f-logo.png 25 | logoalt: 18f logo 26 | 27 | # Navigation 28 | # List links that should appear in the site sidebar here 29 | navigation: 30 | - text: Overview 31 | url: https://pages.18f.gov/api-program/ 32 | internal: false 33 | - text: --Agency API 34 | url: https://pages.18f.gov/api-program/agency-api/ 35 | internal: false 36 | - text: --Developer Hub 37 | url: https://pages.18f.gov/api-program/developer-hub/ 38 | internal: false 39 | - text: --Agency Training 40 | url: https://pages.18f.gov/api-program/training/ 41 | internal: false 42 | - text: --API Analytics 43 | url: https://pages.18f.gov/api-program/api-analytics/ 44 | internal: false 45 | - text: Developer Engagement 46 | url: https://pages.18f.gov/api-program/engagement/ 47 | internal: false 48 | - text: How to Get Started 49 | url: https://pages.18f.gov/api-program/process/ 50 | internal: false 51 | - text: --Project Outline 52 | url: https://pages.18f.gov/api-program/project-outline/ 53 | internal: false 54 | - text: --Statement of Work 55 | url: https://pages.18f.gov/api-program/sow/ 56 | internal: false 57 | - text: Agency Manual 58 | url: https://pages.18f.gov/api-program/agency-manual/ 59 | internal: false 60 | - text: 18F Manual 61 | url: https://pages.18f.gov/api-program/18f-manual/ 62 | internal: false 63 | - text: Get In Touch 64 | url: https://pages.18f.gov/api-program/contact/ 65 | internal: false 66 | 67 | 68 | # Repo list 69 | # List repos that you would like to appear on the homepage here 70 | repos: 71 | - name: API Program 72 | description: Main repository 73 | url: https://github.com/18F/API-Program 74 | 75 | # Style Variables 76 | brand_color: "#1188ff" 77 | -------------------------------------------------------------------------------- /_includes/index.md: -------------------------------------------------------------------------------- 1 | APIs are an efficient, flexible option for sharing your agency’s services and information with the public. Once an API program is in place, distributing more and more data to broader audiences can be quick, simple, and secure. APIs provide a foundation upon which you and the public can build customizable tools, like an app, website, widget, or research project. [Learn more about the benefits and business cases for APIs.](https://pages.18f.gov/API-All-the-X/pages/benefits_of_apis/) 2 | 3 | ## Why Use This Program 4 | Even with guidance and support, an agency might still take years to launch an API program. This service offers a comprehensive solution to help agencies quickly launch a fully functioning API program. 5 | 6 | ## What This Offers Your Agency 7 | In consultation with your team, an 18F project lead and developer will build the following in 3-4 months: 8 | * Production-ready APIs hosted on [cloud.gov](https://cloud.gov) 9 | * Developer-friendly documentation 10 | * Training for agency staff and leadership on the role of APIs for your agency and how to maintain the program going forward 11 | * Robust API analytics to understand how the public is using your APIs (free to your team indefinitely) 12 | 13 | ## Who Should Use This Program 14 | Small, medium, and large agencies are all good candidates for this program. Even at agencies with API programs already in existence, the capacity has often not been scaled out as a ready resource for all teams. The API Program provides an easily launched capacity that is both lightweight and robust, such that multiple teams within one agency could easily share an instance or each want to onboard their own in order to maximize convenience and customization. 15 | -------------------------------------------------------------------------------- /_includes/sidebar.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ page.title }} 7 | 8 | 9 | 10 | 11 | 15 | 16 | 17 | 18 |
19 |
20 |
21 | {% if site.logourl != null %} 22 | 23 | {% endif %} 24 |

{{ site.name }}

25 |
26 |
27 | 28 |
29 | 30 | {% include sidebar.html %} 31 | 32 |
33 | {{ content }} 34 |
35 | 36 |
37 | 38 | 45 |
46 | 47 | 48 | -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |

{{ page.title }}

5 | 6 | {{ content }} 7 | -------------------------------------------------------------------------------- /_layouts/post.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |
5 |

{{ page.title }}

6 |

{{ page.date | date_to_string }}

7 | 8 |
9 | {{ content }} 10 |
11 |
-------------------------------------------------------------------------------- /assets/css/main.css: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | /* 5 | Main.css 6 | ================================== 7 | Begin with generic 'mobile first' styles 8 | */ 9 | 10 | /* 11 | Normalize the box model 12 | ================================== 13 | */ 14 | 15 | *, 16 | *:before, 17 | *:after { 18 | -webkit-box-sizing: border-box; 19 | -moz-box-sizing: border-box; 20 | box-sizing: border-box; 21 | } 22 | 23 | /* 24 | global styles 25 | ================================== 26 | */ 27 | 28 | html, body { 29 | height: 100%; 30 | } 31 | 32 | /* 33 | Typography 34 | ================================== 35 | */ 36 | 37 | body { 38 | font-family: "Avenir Next", Arial, sans-serif; 39 | font-weight: 400; 40 | font-style: normal; 41 | line-height: 1.466666667; 42 | } 43 | 44 | h1, 45 | h3, 46 | h4, 47 | h5, 48 | strong { 49 | font-family: "Avenir Next Demi", "Avenir Next", Arial, sans-serif; 50 | font-weight: 600; 51 | } 52 | 53 | .site-title { 54 | font-size: 1.625em; 55 | font-family: "Avenir Next", Arial, sans-serif; 56 | font-weight: normal; 57 | color: #919395; 58 | margin: 0; 59 | line-height: 1.2941176470588236; 60 | display: inline-block; 61 | } 62 | 63 | h2 { 64 | font-weight: 400; 65 | font-style: normal; 66 | font-size: 1.375em; 67 | margin: 1.4em 0 0 0; 68 | } 69 | 70 | h4 { 71 | font-size: 1em; 72 | text-transform: uppercase; 73 | } 74 | 75 | .page-title { 76 | margin-top: .727272727em; /* 16/22 */ 77 | } 78 | 79 | /* 80 | Lists 81 | -------------------------------- 82 | */ 83 | 84 | .main-content ul { 85 | padding-left: 1.1em; 86 | } 87 | 88 | .main-content li { 89 | margin-bottom: 1em; 90 | } 91 | 92 | li h3, 93 | li h4 { 94 | margin: 0; 95 | } 96 | 97 | li p { 98 | margin-top: 0; 99 | } 100 | 101 | /* 102 | Links 103 | ================================== 104 | */ 105 | 106 | a { 107 | -webkit-transition: .2s; 108 | -moz-transition: .2s; 109 | transition: .2s; 110 | } 111 | 112 | a, 113 | a:link, 114 | a:visited { 115 | color: #0072ce; 116 | border-bottom: 1px dotted #0072ce; 117 | text-decoration: none; 118 | } 119 | 120 | a:hover { 121 | border-bottom: 1px solid #7eb8dd; 122 | color: #7eb8dd; 123 | text-decoration: none; 124 | } 125 | 126 | a:active { 127 | border-bottom: 1px solid #002d72; 128 | color: #002d72; 129 | text-decoration: none; 130 | } 131 | 132 | a:focus { 133 | border-bottom: 1px solid #0072ce; 134 | color: #0072ce; 135 | outline: thin dotted; 136 | text-decoration: none; 137 | } 138 | 139 | a.title-link { 140 | color: #75787B; 141 | border-bottom: none; 142 | } 143 | 144 | a.title-link:hover, 145 | a.title-link:active, 146 | a.title-link:focus { 147 | color: #7eb8dd; 148 | border-bottom: none; 149 | } 150 | 151 | a.skip-link { 152 | color: #0072ce; 153 | border-bottom: none; 154 | padding: .25em; 155 | } 156 | 157 | a.skip-link:hover, 158 | a.skip-link:active, 159 | a.skip-link:focus { 160 | background-color: #0072ce; 161 | color: #fff; 162 | border-bottom: none; 163 | } 164 | 165 | 166 | /* 167 | Navigation 168 | ================================== 169 | */ 170 | 171 | .sidebar-nav a { 172 | display: block; 173 | padding: 10px; 174 | -webkit-transition: .4s; 175 | transition: .4s; 176 | } 177 | .sidebar-nav a, 178 | .sidebar-nav a:link, 179 | .sidebar-nav a:visited { 180 | border-bottom: none; 181 | color: #75787b; 182 | } 183 | .sidebar-nav li:hover, 184 | .sidebar-nav a:focus, 185 | .sidebar-nav li:active, 186 | .sidebar-nav .sidebar-nav-active { 187 | color: #75787b; 188 | border-left: 4px solid {{ site.brand_color }}; 189 | background-color: transparent; 190 | border-bottom: 1px solid #babbbd; 191 | padding-left: 0; 192 | } 193 | .sidebar-nav ul { 194 | margin: 0; 195 | padding: 0; 196 | /*border-top: 1px solid @gray-50;*/ 197 | } 198 | .sidebar-nav li { 199 | list-style: none; 200 | border-bottom: 1px solid #babbbd; 201 | font-size: 1.125em; 202 | padding-left: 4px; 203 | } 204 | .sidebar-nav li:last-child { 205 | border-bottom: none; 206 | } 207 | 208 | 209 | /* 210 | Layout 211 | ================================== 212 | */ 213 | 214 | .logo { 215 | display: block; 216 | } 217 | 218 | .content { 219 | padding-top: 2em; 220 | padding-bottom: 2em; 221 | } 222 | 223 | /* offset the fixed position header for jump links */ 224 | section:before { 225 | display: block; 226 | content: ""; 227 | height: 60px; 228 | margin: -60px 0 0; 229 | } 230 | 231 | .wrap { 232 | max-width: 1200px; 233 | margin: 0 auto; 234 | padding-left: 20px; 235 | padding-right: 20px; 236 | } 237 | 238 | header { 239 | width: 100%; 240 | border-bottom: 4px solid {{ site.brand_color }}; 241 | background-color: #fff; 242 | padding: 2em 0; 243 | } 244 | 245 | 246 | /* 247 | Footer 248 | ================================== 249 | */ 250 | 251 | /* for sticky footer */ 252 | .container { 253 | display: table; 254 | height: 100%; 255 | width: 100%; 256 | } 257 | 258 | footer { 259 | display: table-row; /* for sticky footer */ 260 | height: 1px; /* for sticky footer */ 261 | border-top: 2px solid #babbbd; 262 | background: #f1f2f2; 263 | width: 100%; 264 | font-size: 0.875em; 265 | } 266 | 267 | footer .wrap { 268 | padding-top: 2em; 269 | padding-bottom: 2em; 270 | } 271 | 272 | 273 | /* 274 | Helpers 275 | ================================== 276 | */ 277 | 278 | /* Hide from both screenreaders and browsers: h5bp.com/u */ 279 | .hidden { 280 | display: none !important; 281 | visibility: hidden; 282 | } 283 | 284 | /* Hide only visually, but have it available for screenreaders: h5bp.com/v */ 285 | .visuallyhidden { 286 | border: 0; 287 | clip: rect(0 0 0 0); 288 | height: 1px; 289 | margin: -1px; 290 | overflow: hidden; 291 | padding: 0; 292 | position: absolute; 293 | width: 1px; 294 | } 295 | 296 | /* Extends the .visuallyhidden class to allow the element to be focusable 297 | * when navigated to via the keyboard: h5bp.com/p */ 298 | .visuallyhidden.focusable:active, 299 | .visuallyhidden.focusable:focus { 300 | clip: auto; 301 | height: auto; 302 | margin: 0; 303 | overflow: visible; 304 | position: static; 305 | width: auto; 306 | } 307 | 308 | /* Hide visually and from screenreaders, but maintain layout */ 309 | .invisible { 310 | visibility: hidden; 311 | } 312 | 313 | 314 | /* 315 | Style 316 | ================================== 317 | */ 318 | 319 | .intro { 320 | color: #75787B; 321 | } 322 | 323 | li h4 { 324 | margin: 0; 325 | } 326 | 327 | .license { 328 | font-family: "Avenir Next Demi", Arial, sans-serif; 329 | font-weight: normal; 330 | font-style: normal; 331 | } 332 | 333 | pre { 334 | max-width: 100%; 335 | font-size: 0.875em; 336 | overflow-y: scroll; 337 | background-color: #f1f2f2; 338 | padding: 10px; 339 | } 340 | 341 | /* 342 | Post list 343 | ---------------------------------- 344 | */ 345 | 346 | ul.posts { 347 | padding: 0; 348 | } 349 | 350 | .posts li { 351 | list-style: none; 352 | } 353 | 354 | .post-date { 355 | color: #75787B; 356 | } 357 | 358 | /* 359 | Repo list 360 | ---------------------------------- 361 | */ 362 | 363 | ul.repo-list { 364 | margin: .5em 0 1em 0; 365 | padding: 0; 366 | } 367 | 368 | .repo-list li { 369 | list-style: none; 370 | } 371 | 372 | .repo-list p { 373 | margin: 0; 374 | font-size: 0.875em; 375 | } 376 | 377 | .repo-list h4 { 378 | text-transform: none; 379 | } 380 | 381 | /* 382 | Helper Classes 383 | ================================== 384 | */ 385 | 386 | /* 387 | Clearfix list 388 | ---------------------------------- 389 | */ 390 | 391 | .group:before, 392 | .group:after { 393 | content: " "; 394 | display: table; 395 | } 396 | 397 | .group:after { 398 | clear: both; 399 | } 400 | 401 | .group { 402 | *zoom: 1; 403 | } 404 | 405 | /* 406 | Desktop Styles 407 | ================================== 408 | */ 409 | 410 | @media screen and (min-width: 45em) and (min-height: 32.5em) { 411 | 412 | /* 413 | Typography 414 | ============================== 415 | */ 416 | 417 | /* 418 | Layout 419 | ============================== 420 | */ 421 | 422 | .logo { 423 | max-width: 30%; 424 | padding-right: 20px; 425 | float: right; 426 | } 427 | 428 | aside { 429 | width: 30%; 430 | float: left; 431 | } 432 | 433 | .main-content { 434 | width: 67%; 435 | float: right; 436 | margin-bottom: 120px; 437 | } 438 | 439 | /* 440 | Navigation 441 | ============================== 442 | */ 443 | 444 | 445 | /* 446 | Style 447 | ============================== 448 | */ 449 | 450 | /* 451 | Repo list 452 | ------------------------------ 453 | */ 454 | 455 | .repo-list li { 456 | list-style: none; 457 | display: block; 458 | float: left; 459 | height: 4.0625em; 460 | max-height: 4.0625em; 461 | background-color: #E7E7E6; 462 | border-left: 1px solid #BABBBD; 463 | width: 30%; 464 | } 465 | 466 | .repo-list a:link, 467 | .repo-list a:visited { 468 | display: block; 469 | max-height: 4.0625em; 470 | background-color: #E7E7E6; 471 | border-bottom: none; 472 | padding: .625em 1em 1em 1em; 473 | } 474 | 475 | .repo-list a:hover { 476 | color: #4D5F87; 477 | background-color: #CDE3F1; 478 | } 479 | 480 | .repo-list li:first-child { 481 | text-align: center; 482 | border-left: none; 483 | line-height: 60px; 484 | padding: .625em 1em; 485 | width: 10%; 486 | } 487 | 488 | } 489 | 490 | @media screen and (max-width: 54.375em) and (min-height: 32.5em) { 491 | 492 | /* keep the repo list containers the same height, but account for the need for more height */ 493 | 494 | .repo-list li { 495 | height: 6em; 496 | max-height: 6em; 497 | } 498 | 499 | .repo-list a:link, 500 | .repo-list a:visited { 501 | max-height: 6em; 502 | } 503 | } 504 | 505 | /* 506 | Mobile Styles 507 | ================================== 508 | */ 509 | 510 | @media screen and (max-width: 40.5em) { 511 | 512 | .main-content { 513 | margin-top: 1.5em; 514 | } 515 | 516 | } 517 | -------------------------------------------------------------------------------- /assets/css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v2.1.3 | MIT License | git.io/normalize */ 2 | 3 | /* ========================================================================== 4 | HTML5 display definitions 5 | ========================================================================== */ 6 | 7 | /** 8 | * Correct `block` display not defined in IE 8/9. 9 | */ 10 | 11 | article, 12 | aside, 13 | details, 14 | figcaption, 15 | figure, 16 | footer, 17 | header, 18 | hgroup, 19 | main, 20 | nav, 21 | section, 22 | summary { 23 | display: block; 24 | } 25 | 26 | /** 27 | * Correct `inline-block` display not defined in IE 8/9. 28 | */ 29 | 30 | audio, 31 | canvas, 32 | video { 33 | display: inline-block; 34 | } 35 | 36 | /** 37 | * Prevent modern browsers from displaying `audio` without controls. 38 | * Remove excess height in iOS 5 devices. 39 | */ 40 | 41 | audio:not([controls]) { 42 | display: none; 43 | height: 0; 44 | } 45 | 46 | /** 47 | * Address `[hidden]` styling not present in IE 8/9. 48 | * Hide the `template` element in IE, Safari, and Firefox < 22. 49 | */ 50 | 51 | [hidden], 52 | template { 53 | display: none; 54 | } 55 | 56 | /* ========================================================================== 57 | Base 58 | ========================================================================== */ 59 | 60 | /** 61 | * 1. Set default font family to sans-serif. 62 | * 2. Prevent iOS text size adjust after orientation change, without disabling 63 | * user zoom. 64 | */ 65 | 66 | html { 67 | font-family: sans-serif; /* 1 */ 68 | -ms-text-size-adjust: 100%; /* 2 */ 69 | -webkit-text-size-adjust: 100%; /* 2 */ 70 | } 71 | 72 | /** 73 | * Remove default margin. 74 | */ 75 | 76 | body { 77 | margin: 0; 78 | } 79 | 80 | /* ========================================================================== 81 | Links 82 | ========================================================================== */ 83 | 84 | /** 85 | * Remove the gray background color from active links in IE 10. 86 | */ 87 | 88 | a { 89 | background: transparent; 90 | } 91 | 92 | /** 93 | * Address `outline` inconsistency between Chrome and other browsers. 94 | */ 95 | 96 | a:focus { 97 | outline: thin dotted; 98 | } 99 | 100 | /** 101 | * Improve readability when focused and also mouse hovered in all browsers. 102 | */ 103 | 104 | a:active, 105 | a:hover { 106 | outline: 0; 107 | } 108 | 109 | /* ========================================================================== 110 | Typography 111 | ========================================================================== */ 112 | 113 | /** 114 | * Address variable `h1` font-size and margin within `section` and `article` 115 | * contexts in Firefox 4+, Safari 5, and Chrome. 116 | */ 117 | 118 | h1 { 119 | font-size: 2em; 120 | margin: 0.67em 0; 121 | } 122 | 123 | /** 124 | * Address styling not present in IE 8/9, Safari 5, and Chrome. 125 | */ 126 | 127 | abbr[title] { 128 | border-bottom: 1px dotted; 129 | } 130 | 131 | /** 132 | * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. 133 | */ 134 | 135 | b, 136 | strong { 137 | font-weight: bold; 138 | } 139 | 140 | /** 141 | * Address styling not present in Safari 5 and Chrome. 142 | */ 143 | 144 | dfn { 145 | font-style: italic; 146 | } 147 | 148 | /** 149 | * Address differences between Firefox and other browsers. 150 | */ 151 | 152 | hr { 153 | -moz-box-sizing: content-box; 154 | box-sizing: content-box; 155 | height: 0; 156 | } 157 | 158 | /** 159 | * Address styling not present in IE 8/9. 160 | */ 161 | 162 | mark { 163 | background: #ff0; 164 | color: #000; 165 | } 166 | 167 | /** 168 | * Correct font family set oddly in Safari 5 and Chrome. 169 | */ 170 | 171 | code, 172 | kbd, 173 | pre, 174 | samp { 175 | font-family: monospace, serif; 176 | font-size: 1em; 177 | } 178 | 179 | /** 180 | * Improve readability of pre-formatted text in all browsers. 181 | */ 182 | 183 | pre { 184 | white-space: pre-wrap; 185 | } 186 | 187 | /** 188 | * Set consistent quote types. 189 | */ 190 | 191 | q { 192 | quotes: "\201C" "\201D" "\2018" "\2019"; 193 | } 194 | 195 | /** 196 | * Address inconsistent and variable font size in all browsers. 197 | */ 198 | 199 | small { 200 | font-size: 80%; 201 | } 202 | 203 | /** 204 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 205 | */ 206 | 207 | sub, 208 | sup { 209 | font-size: 75%; 210 | line-height: 0; 211 | position: relative; 212 | vertical-align: baseline; 213 | } 214 | 215 | sup { 216 | top: -0.5em; 217 | } 218 | 219 | sub { 220 | bottom: -0.25em; 221 | } 222 | 223 | /* ========================================================================== 224 | Embedded content 225 | ========================================================================== */ 226 | 227 | /** 228 | * Remove border when inside `a` element in IE 8/9. 229 | */ 230 | 231 | img { 232 | border: 0; 233 | } 234 | 235 | /** 236 | * Correct overflow displayed oddly in IE 9. 237 | */ 238 | 239 | svg:not(:root) { 240 | overflow: hidden; 241 | } 242 | 243 | /* ========================================================================== 244 | Figures 245 | ========================================================================== */ 246 | 247 | /** 248 | * Address margin not present in IE 8/9 and Safari 5. 249 | */ 250 | 251 | figure { 252 | margin: 0; 253 | } 254 | 255 | /* ========================================================================== 256 | Forms 257 | ========================================================================== */ 258 | 259 | /** 260 | * Define consistent border, margin, and padding. 261 | */ 262 | 263 | fieldset { 264 | border: 1px solid #c0c0c0; 265 | margin: 0 2px; 266 | padding: 0.35em 0.625em 0.75em; 267 | } 268 | 269 | /** 270 | * 1. Correct `color` not being inherited in IE 8/9. 271 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 272 | */ 273 | 274 | legend { 275 | border: 0; /* 1 */ 276 | padding: 0; /* 2 */ 277 | } 278 | 279 | /** 280 | * 1. Correct font family not being inherited in all browsers. 281 | * 2. Correct font size not being inherited in all browsers. 282 | * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. 283 | */ 284 | 285 | button, 286 | input, 287 | select, 288 | textarea { 289 | font-family: inherit; /* 1 */ 290 | font-size: 100%; /* 2 */ 291 | margin: 0; /* 3 */ 292 | } 293 | 294 | /** 295 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 296 | * the UA stylesheet. 297 | */ 298 | 299 | button, 300 | input { 301 | line-height: normal; 302 | } 303 | 304 | /** 305 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 306 | * All other form control elements do not inherit `text-transform` values. 307 | * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. 308 | * Correct `select` style inheritance in Firefox 4+ and Opera. 309 | */ 310 | 311 | button, 312 | select { 313 | text-transform: none; 314 | } 315 | 316 | /** 317 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 318 | * and `video` controls. 319 | * 2. Correct inability to style clickable `input` types in iOS. 320 | * 3. Improve usability and consistency of cursor style between image-type 321 | * `input` and others. 322 | */ 323 | 324 | button, 325 | html input[type="button"], /* 1 */ 326 | input[type="reset"], 327 | input[type="submit"] { 328 | -webkit-appearance: button; /* 2 */ 329 | cursor: pointer; /* 3 */ 330 | } 331 | 332 | /** 333 | * Re-set default cursor for disabled elements. 334 | */ 335 | 336 | button[disabled], 337 | html input[disabled] { 338 | cursor: default; 339 | } 340 | 341 | /** 342 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 343 | * 2. Remove excess padding in IE 8/9/10. 344 | */ 345 | 346 | input[type="checkbox"], 347 | input[type="radio"] { 348 | box-sizing: border-box; /* 1 */ 349 | padding: 0; /* 2 */ 350 | } 351 | 352 | /** 353 | * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 354 | * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome 355 | * (include `-moz` to future-proof). 356 | */ 357 | 358 | input[type="search"] { 359 | -webkit-appearance: textfield; /* 1 */ 360 | -moz-box-sizing: content-box; 361 | -webkit-box-sizing: content-box; /* 2 */ 362 | box-sizing: content-box; 363 | } 364 | 365 | /** 366 | * Remove inner padding and search cancel button in Safari 5 and Chrome 367 | * on OS X. 368 | */ 369 | 370 | input[type="search"]::-webkit-search-cancel-button, 371 | input[type="search"]::-webkit-search-decoration { 372 | -webkit-appearance: none; 373 | } 374 | 375 | /** 376 | * Remove inner padding and border in Firefox 4+. 377 | */ 378 | 379 | button::-moz-focus-inner, 380 | input::-moz-focus-inner { 381 | border: 0; 382 | padding: 0; 383 | } 384 | 385 | /** 386 | * 1. Remove default vertical scrollbar in IE 8/9. 387 | * 2. Improve readability and alignment in all browsers. 388 | */ 389 | 390 | textarea { 391 | overflow: auto; /* 1 */ 392 | vertical-align: top; /* 2 */ 393 | } 394 | 395 | /* ========================================================================== 396 | Tables 397 | ========================================================================== */ 398 | 399 | /** 400 | * Remove most spacing between table cells. 401 | */ 402 | 403 | table { 404 | border-collapse: collapse; 405 | border-spacing: 0; 406 | } -------------------------------------------------------------------------------- /assets/css/syntax.css: -------------------------------------------------------------------------------- 1 | .highlight { background: #ffffff; } 2 | .highlight .c { color: #999988; font-style: italic } /* Comment */ 3 | .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ 4 | .highlight .k { font-weight: bold } /* Keyword */ 5 | .highlight .o { font-weight: bold } /* Operator */ 6 | .highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ 7 | .highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ 8 | .highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ 9 | .highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ 10 | .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ 11 | .highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ 12 | .highlight .ge { font-style: italic } /* Generic.Emph */ 13 | .highlight .gr { color: #aa0000 } /* Generic.Error */ 14 | .highlight .gh { color: #999999 } /* Generic.Heading */ 15 | .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ 16 | .highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ 17 | .highlight .go { color: #888888 } /* Generic.Output */ 18 | .highlight .gp { color: #555555 } /* Generic.Prompt */ 19 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 20 | .highlight .gu { color: #aaaaaa } /* Generic.Subheading */ 21 | .highlight .gt { color: #aa0000 } /* Generic.Traceback */ 22 | .highlight .kc { font-weight: bold } /* Keyword.Constant */ 23 | .highlight .kd { font-weight: bold } /* Keyword.Declaration */ 24 | .highlight .kp { font-weight: bold } /* Keyword.Pseudo */ 25 | .highlight .kr { font-weight: bold } /* Keyword.Reserved */ 26 | .highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ 27 | .highlight .m { color: #009999 } /* Literal.Number */ 28 | .highlight .s { color: #d14 } /* Literal.String */ 29 | .highlight .na { color: #008080 } /* Name.Attribute */ 30 | .highlight .nb { color: #0086B3 } /* Name.Builtin */ 31 | .highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ 32 | .highlight .no { color: #008080 } /* Name.Constant */ 33 | .highlight .ni { color: #800080 } /* Name.Entity */ 34 | .highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ 35 | .highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ 36 | .highlight .nn { color: #555555 } /* Name.Namespace */ 37 | .highlight .nt { color: #000080 } /* Name.Tag */ 38 | .highlight .nv { color: #008080 } /* Name.Variable */ 39 | .highlight .ow { font-weight: bold } /* Operator.Word */ 40 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */ 41 | .highlight .mf { color: #009999 } /* Literal.Number.Float */ 42 | .highlight .mh { color: #009999 } /* Literal.Number.Hex */ 43 | .highlight .mi { color: #009999 } /* Literal.Number.Integer */ 44 | .highlight .mo { color: #009999 } /* Literal.Number.Oct */ 45 | .highlight .sb { color: #d14 } /* Literal.String.Backtick */ 46 | .highlight .sc { color: #d14 } /* Literal.String.Char */ 47 | .highlight .sd { color: #d14 } /* Literal.String.Doc */ 48 | .highlight .s2 { color: #d14 } /* Literal.String.Double */ 49 | .highlight .se { color: #d14 } /* Literal.String.Escape */ 50 | .highlight .sh { color: #d14 } /* Literal.String.Heredoc */ 51 | .highlight .si { color: #d14 } /* Literal.String.Interpol */ 52 | .highlight .sx { color: #d14 } /* Literal.String.Other */ 53 | .highlight .sr { color: #009926 } /* Literal.String.Regex */ 54 | .highlight .s1 { color: #d14 } /* Literal.String.Single */ 55 | .highlight .ss { color: #990073 } /* Literal.String.Symbol */ 56 | .highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ 57 | .highlight .vc { color: #008080 } /* Name.Variable.Class */ 58 | .highlight .vg { color: #008080 } /* Name.Variable.Global */ 59 | .highlight .vi { color: #008080 } /* Name.Variable.Instance */ 60 | .highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ 61 | -------------------------------------------------------------------------------- /assets/img/18f-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/18F/api-program/4e0f798be696950c4476ef273db2e794c85818cf/assets/img/18f-logo.png -------------------------------------------------------------------------------- /assets/img/octocat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/18F/api-program/4e0f798be696950c4476ef273db2e794c85818cf/assets/img/octocat.png -------------------------------------------------------------------------------- /assets/js/respond.min.js: -------------------------------------------------------------------------------- 1 | /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ 2 | /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ 3 | window.matchMedia=window.matchMedia||function(a){"use strict";var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='­',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document); 4 | 5 | /*! Respond.js v1.3.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ 6 | (function(a){"use strict";function x(){u(!0)}var b={};if(a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,!b.mediaQueriesSupported){var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var b=m.shift();v(b.href,function(c){p(c,b.href,b.media),h[b.href]=!0,a.setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(b){var h="clientWidth",k=d[h],m="CSS1Compat"===c.compatMode&&k||c.body[h]||k,n={},o=l[l.length-1],p=(new Date).getTime();if(b&&q&&i>p-q)return a.clearTimeout(r),r=a.setTimeout(u,i),void 0;q=p;for(var v in e)if(e.hasOwnProperty(v)){var w=e[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?t||s():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?t||s():1)),w.hasquery&&(z&&A||!(z||m>=x)||!(A||y>=m))||(n[w.media]||(n[w.media]=[]),n[w.media].push(f[w.rules]))}for(var C in g)g.hasOwnProperty(C)&&g[C]&&g[C].parentNode===j&&j.removeChild(g[C]);for(var D in n)if(n.hasOwnProperty(D)){var E=c.createElement("style"),F=n[D].join("\n");E.type="text/css",E.media=D,j.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(c.createTextNode(F)),g.push(E)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)}})(this); 7 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: API Program 4 | --- 5 | 6 | {% capture index %}{% include index.md %}{% endcapture %} 7 | {{ index | markdownify }} 8 | -------------------------------------------------------------------------------- /pages/18f-manual.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "18F Manual" 4 | permalink: /18f-manual/ 5 | --- 6 | 7 | _Below are directions for common tasks for the 18F team that is participating in an API Program engagement. Further documentation will be regularly added, but you can also file requests for something specific in the [issue tracker](https://github.com/18F/api-program/issues)._ 8 | 9 | ## Process for Onboarding a New Agency 10 | 11 | ### How to set up an agency with cloud.gov 12 | 13 | If an agency does not have a cloud.gov instance yet, go to #cloud-gov-business and request an agency sandbox be created and provide the email addresses as the user accounts that should be created. Those people will receive emails when the account is created. 14 | 15 | _Note: You'll need to follow up and upgrade the cloud.gov instance to a FISMA Low isntance._ 16 | 17 | 18 | ### How to set up autoapi in the agency's cloud.gov instance New Instance of the API 19 | 20 | * See instructions [here](https://github.com/18F/autoapi/blob/master/instructions.md). 21 | 22 | ### Set up api.data.gov for the autoapi instance 23 | 24 | Once the autoapi instance has been stood up... 25 | 26 | * Log into api.data.gov/admin. 27 | * Configuration -> API Backends -> Add API Backends 28 | * Backend Protocol: HTTPS 29 | * Server: Name of Backend Host 30 | * Frontend Host: api.[agency].gov 31 | * Backend Host: [subdomain of hosted autoapi instance] 32 | * Matching URL Prefixes - Frontend Prefix: /data/ 33 | * Matching URL Prefixes - Backend Prefix: / 34 | * Save 35 | * Configuration -> Publish Changes (Check only your API) 36 | 37 | _If the DNS delegation for api.[agency].gov is not yet compete, set up the API analytics at api.18f.gov/[agency] so that we can begin using the API._ 38 | 39 | ### Set up access to api.data.gov analytics 40 | 41 | * Users -> API Scopes -> Add New API Scopes 42 | * Name: [Agency] - AutoAPI 43 | * Host: api.[agency].gov 44 | * Path Prefix: /data/ 45 | * Save 46 | * Users -> Admin Groups -> Add New Admin Group 47 | * Group Name: [Agency] - AutoAPI 48 | * Permissions: [all] 49 | * Users -> Admin Accounts -> Add New Admin 50 | * Username: [their email address] 51 | * Permissions - Groups: [Agency] - AutoAPI 52 | 53 | ### Learn more about api.data.gov 54 | 55 | You can learn more about the service at: 56 | * https://api.data.gov/about 57 | * https://github.com/18F/api.data.gov/wiki/User-Manual:-Agencies 58 | * https://github.com/18F/api.data.gov-ops 59 | * https://apiumbrella.io/ 60 | 61 | -------------------------------------------------------------------------------- /pages/agency-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Agency API" 4 | permalink: /agency-api/ 5 | --- 6 | 7 | The API itself is a simple, yet robust API engine. It has been optimized to be straighforward and fault tolerant. 8 | 9 | We provide you with an Amazon S3 bucket (or you can provide your own) and point the API at it. Then, you upload static data CSV files into the S3 bucket, and they are automatically converted into a queryable, developer-friendly API. The API is then updated by adding, overwriting, and deleting files. Each static file generates a 10 | 11 | In the initial setup, you will pick a base URL, such as `https://api.[agency].gov/data/`. When a new file is uploaded into the bucket, an API for that dataset is then generated at `https://api.[agency].gov/data/name-of-file`. Each static file results in a new API. 12 | 13 | For each API , the file structure dictates the API design. When you upload a CSV dataset, then the column headers will become query parameters for the API. This direct connection between how the dataset is structured and how the API functions enables us to more easily refine your data publication and improve the developer experience. 14 | 15 | The API includes straightfoward functionality such as querying, pagination, and sorting. For more details on the API and how to use it, see the [agency manual](https://pages.18f.gov/api-program/agency-manual). 16 | -------------------------------------------------------------------------------- /pages/agency-manual.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Agency Manual" 4 | permalink: /agency-manual/ 5 | --- 6 | 7 | _Below are directions for common tasks for the core team at the agency client. Further documentation will be regularly added, but you can also file requests for something specific in the [issue tracker](https://github.com/18F/api-program/issues)._ 8 | 9 | ## Setting up the API Engine 10 | 11 | ### Creating a cloud.gov account 12 | 13 | https://docs.cloud.gov/intro/overview/using-cloudgov-paas/ 14 | 15 | ### Granting 18F access to your cloud.gov sandbox 16 | 17 | 1. Log into console.cloud.gov 18 | 2. In the top left, choose `Change Organization -> SANDBOX`. 19 | 3. Click on your name (first.last). 20 | 4. Click on the `User Management` tab. 21 | 5. Click on the `All SANDBOX Org Users` tab. 22 | 6. Search for the 18F staff who are requesting access and click on their name. 23 | 7. Switch all three permissions (`Space Manager`, `Space Developer`, and `Space Auditor`) from `Off` to `On`. 24 | 25 | ## Managing an API 26 | 27 | ### Accessing the S3 bucket 28 | 29 | With this API engine, you will add, update, or remove APIs is by uploading, overwriting, or deleting static files in the specific S3 bucket. There are [many ways of interacting with S3 buckets](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=how%20to%20access%20s3%20bucket). For instance, [Cyberduck](https://cyberduck.io/?l=en) is a free, open source tool that works on Windows and Mac computers. 30 | 31 | Regardless of which tool you use, you will need the following information: 32 | 33 | * access_key_id (may also be labeled 'username') 34 | * bucket (may also be labeled 'path') 35 | * secret_access_key (may also be labeled 'password') 36 | 37 | Once you have authenticated to your S3 bucket, you will be able to do the following. 38 | 39 | ### How to add a dataset 40 | 41 | * Prepare a machine-readable data file on your computer. 42 | * Depending on the S3 client you are using, there may be several ways to upload files, but many will have an upload button or allow you to drag and drop the static file into the client window. 43 | * Note that formatting errors in the data file may keep the API from generating. If the dataset was successfully uploaded and the automated API documentation is not updated within 30 seconds, there was likely a formatting issue with the data file. You will need to review the static data file, normalize it, and re-upload it in order to successfully generate the API. 44 | * The API will be accessible at [api-base-url/name-of-file-that-was-uploaded]. 45 | 46 | ### How to edit a dataset 47 | 48 | * In order to update an existing API, prepare a machine-readable data file on your computer that has the same file name that was uploaded originally. 49 | * Follow the same steps of adding a dataset but when prompted, choose to overwrite the file in the S3 bucket. 50 | * Note that formatting errors in the data file may keep the API from updating. If the dataset was successfully uploaded and the automated API documentation is not updated within 30 seconds, there was likely a formatting issue with the data file. You will need to review the static data file, normalize it, and re-upload it in order to successfully generate the API. 51 | * The API will be accessible at the same URL - [api-base-url/name-of-file-that-was-uploaded]. 52 | 53 | 54 | ### How to remove a dataset 55 | 56 | * Using your S3 client, delete the static file. 57 | 58 | ### How to query the API 59 | 60 | The API has a number of built in query options, described below. 61 | 62 | * Page number 63 | 64 | * _?page=[page number]_ 65 | * _[example](https://gb-autoapi.apps.cloud.gov/capitals?page=2)_ 66 | 67 | * Select Number of Results Per Page 68 | 69 | * _?per_page=[number of results]_ 70 | * _[example](https://gb-autoapi.apps.cloud.gov/capitals?per_page=30)_ 71 | 72 | * Filter by 1 column 73 | 74 | * _?[columnheader]=[value]_ 75 | * _[example](https://gb-autoapi.apps.cloud.gov/capitals?abbrev=ak)_ 76 | 77 | * Filter by more than 1 column (returns results that have both value1 and value4) 78 | 79 | * _?[columnheader1]=[value1]&[columnheader3]=[value4]_ 80 | * _[example](https://gb-autoapi.apps.cloud.gov/capitals?abbrev=ak&capital=Juneau)_ 81 | 82 | * Filter by multiple options in a column (returns results that have value1 OR value2) 83 | 84 | * _?[columnheader1]=[value1]&[columnheader1]=[value2]_ 85 | * _[example](https://gb-autoapi.apps.cloud.gov/capitals?abbrev=ak&abbrev=az)_ 86 | 87 | * Return an individual record 88 | 89 | * _/[index number]_ 90 | * _[example](https://gb-autoapi.apps.cloud.gov/capitals/3)_ 91 | 92 | * Return the meta structure for the API 93 | 94 | * _/meta/_ 95 | * _[example](https://gb-autoapi.apps.cloud.gov/capitals/meta)_ 96 | 97 | * Sort 98 | 99 | * _?sort=[columnheader3]_ or _?sort=-[columnheader3]_ 100 | * _[example](https://gb-autoapi.apps.cloud.gov/capitals?sort=abbrev)_ or _[example](https://gb-autoapi.apps.cloud.gov/capitals?sort=-abbrev)_ 101 | 102 | 103 | 104 | 105 | ### How to view the API analytics 106 | 107 | * Log in at api.data.gov/admin. 108 | * To see how the API is being used, navigate to Analytics -> API Drilldown. 109 | * API hits can be individual examined or measured via a wide range of queries at Analytics -> Filter Logs. 110 | * API activity can be viewed specific to each developer key in order to analyze who is using the API and how much and how their application is being used. This can be found at Analytics -> By Users. 111 | * To export a list of developers who are using the API, navigate to Analytics -> By Users and then use this query - `Request: URL Path:contains:[part-of-api-url]`. You'll then be able to export the results. 112 | 113 | ### How to manage agency access to the API analytics 114 | 115 | * Log in at api.data.gov/admin. 116 | * Under Users -> Admin accounts, you'll be able to add, edit, and remove admin accounts. 117 | 118 | 119 | ## Monitoring the API 120 | 121 | 122 | ### How to check system logs 123 | 124 | 125 | ### How to stress test the API 126 | 127 | 128 | -------------------------------------------------------------------------------- /pages/api-analytics.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "API Analytics" 4 | permalink: /api-analytics/ 5 | --- 6 | 7 | The hosted API uses the [api.data.gov service](https://api.data.gov/about) to provide several important functions: 8 | 9 | * API keys, to know who your developers are 10 | * Usage tiers, to manage how they use your APIs 11 | * API analytics, so that you can see who is using your APIs, how, and how much 12 | 13 | For more details on how the API analytics work, see the [agency manual](https://pages.18f.gov/api-program/agency-manual). 14 | -------------------------------------------------------------------------------- /pages/contact.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Get in Touch" 4 | permalink: /contact/ 5 | --- 6 | 7 | Interested in learning more and seeing if this is right for your agency? 8 | 9 | Please [get in touch](mailto:gray.brooks@gsa.gov) and let's schedule time to talk! 10 | -------------------------------------------------------------------------------- /pages/developer-hub.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Developer Hub" 4 | permalink: /developer-hub/ 5 | --- 6 | 7 | A developer hub is the central resource that you put forward for developers who want to access your agency APIs. It may include any of a [range of components](https://pages.18f.gov/API-All-the-X/pages/developer_hub_kit/), but most importantly must be a starting point where the developer can find your APIs and easily begin using them. 8 | 9 | The developer hub is located at a subsection of your website, preferably at `https://developer.agency.gov`, but should also be redirected from `agency.gov/developer` and `agency.gov/developers`. It's major sections will include: 10 | 11 | * Overview of your available APIs 12 | * Individual API documentation 13 | * API key signup 14 | * Developer feedback 15 | * Program updates 16 | * Links to other Agency data and open source resources 17 | 18 | Ideally, we will provide you with a discrete, easy to maintain Jekyll website [similar to these](https://pages.18f.gov/API-All-the-X/pages/open_source_documentation/). However, the components can also be provided as materials that can be pasted into your existing CMS solution. 19 | 20 | For more details on the developer hub, see the [agency manual](https://pages.18f.gov/api-program/agency-manual). 21 | -------------------------------------------------------------------------------- /pages/engagement.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Engagement" 4 | permalink: /engagement/ 5 | --- 6 | 7 | One quickly realizes that generating APIs is a half measure; that in order to implement a successful API program, one also needs to engage with developers, solicit feedback, and iterate the APIs and documentation in order to improve the developer experience. This is a never ending state of being. A responsible and successful API program is never done listening to its developers and refining its offerings (this is just at Google and Amazon as it is in government!). 8 | 9 | We intentionally designed the API engine itself to be very easy to manage, In support of agile methodologies, we'll launch an initial set of APIs and focus on gathering developer feedback to inform further iterations. In other words, we'll devote a signficant portion of our time together to engaging with the developers who use your APIs and improving their experience. The more we do this, the more we'll attract new developers and the more that they will use your APIs to build useful products. 10 | 11 | At a minimum, we will have four sources of developer feedback to process and respond to: 12 | 13 | * A public feedback section on your developer hub 14 | * API key registrations 15 | * API usability sessions 16 | * Social media outreach 17 | 18 | For more details on developer engagement, see the [agency manual](https://pages.18f.gov/api-program/agency-manual). 19 | 20 | 21 | -------------------------------------------------------------------------------- /pages/process.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "What the IAA process looks like" 4 | permalink: /process/ 5 | --- 6 | 7 | The goal of this website is to help you understand what the API Program provides so that you can decide if it interests you. Feel free at any time to [reach out](https://pages.18f.gov/api-program/contact/) and we can schedule a call or in-person visit to go into greater detail and answer any questions you have. 8 | 9 | The following material attempts to answer common questions about the engagement. Our staff are available to work with you to onboard this program at your agency whenever you are ready. 10 | 11 | 18F provides work to agencies through Inter-Agency Agreements that require us to recoup our expenses. We don't make a profit but rather charge for the labor and resources that we deliver you. 12 | 13 | This service provides: 14 | 15 | * A FISMA low cloud.gov instance 16 | * The autoapi stack hosted in your cloud.gov instance 17 | * 240 hours of training, consulting, and engagement 18 | 19 | The cost of this service is $75,000. The period of performance would be 4 months, begining with the date of final signatures on the Inter-Agency Agreement. 20 | 21 | The Inter-Agency Agreement for this project [can be found here](https://pages.18f.gov/api-program/iaa). 22 | 23 | Once we have answered any questions you have, if you are interested in pursuing this service, here are the next steps: 24 | 25 | * Investigate internally which parts of your agency will need to be involved in your the signing and implementing of this IAA. 26 | * Have those individuals review the details of the Inter-Agency Agreement. If they have questions, we are happy to answer them. 27 | * Coordinate with Gray Brooks, who will confirm the IAA details. 28 | * Circulate the proposed documents for acceptance on your end. Email us with copies of the IAA documents that have been signed by your points of contact. 29 | * We will then reciprocate with signatures from our officials and the engagement can begin. 30 | 31 | -------------------------------------------------------------------------------- /pages/project-outline.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Project Outline" 4 | permalink: /project-outline/ 5 | --- 6 | 7 | Once the IAA start date arrives, program work can begin. Below is an overview of the steps that make up that work. 8 | 9 | ## Administrative needs 10 | * Schedule a kick-off meeting 11 | * Identify the agency core team 12 | * Create the project repository 13 | * Grant agency core team access to the project repository 14 | * Request access to website analytics for complete web presence 15 | * Ensure that this includes website analytics for pre-existing API documentation 16 | * Request access to API analytics of pre-existing APIs 17 | * Beginning planning for after the period of performance ends 18 | 19 | 20 | ## Launch the API capacity 21 | * Create a cloud.gov instance for the agency 22 | * Create cloud.gov accounts for the agency core team 23 | * Coordinate 18F access to agency cloud.gov instance 24 | * Install autoapi in the agency's cloud.gov instance 25 | * Decide on API base url 26 | * Decide on autoapi base url 27 | * Request API baseurl from agency IT 28 | * Set up api.data.gov for the agency 29 | * Configure api.data.gov with autoapi base url 30 | * Activate api.data.gov for the autoapi instance 31 | * Update the autoapi instance with the api.data.gov url 32 | * Create initial APIs using new engine 33 | * Test autoapi instance 34 | * Test limits of the API 35 | * Grant S3 access to agency core team 36 | 37 | ## Build the developer hub 38 | * Create agency GitHub org if it does not already exist 39 | * Create a repository for proposed developer hub 40 | * Review developer hub templates 41 | * Implement a developer hub template 42 | * Customize the developer hub with initial API resources 43 | * Integrate pre-existing APIs and documentation into developer hub 44 | * Review hosting options for developer hub 45 | * Choose a domain for the developer hub 46 | * Request developer hub URL from agency IT 47 | * Apply URL to developer hub 48 | * Deprecate legacy api documentation 49 | 50 | ## Train agency staff 51 | * Train core team on the fundamentals 52 | * Weigh wider staff training 53 | * Weigh training for core team on expanded topics 54 | * Develop plan for continued iteration of API design 55 | 56 | ## Engage Developers 57 | * Identify existing developer community 58 | * Identify developer engagement forums 59 | * Consider potential developer community 60 | * Create a developer engagement plan 61 | * Solicit developer feedback on current, potential APIs 62 | * Develop plans for continued iteration of the developer documentation 63 | * Weigh additional developer resources 64 | 65 | ## General Implementation 66 | * Survey existing APIs 67 | * Survey existing data resources 68 | * Survey data download analytics 69 | * Weigh transition of pre-existing APIs into autoapi engine 70 | * Document baseline measurements 71 | * Develop a short, medium, and long term plan for API expansion 72 | * Provide suggestions for improvement to pre-existing APIs and developer resources that do not get migrated 73 | * Review metrics over time 74 | * Review candidates for further API creation 75 | * Prototype dogfooding the agency APIs 76 | * Develop plans for further dogfooding of the agency APIs 77 | 78 | ## Handoff 79 | * Assemble and share all documentation 80 | * Align the program with oyther current or upcoming 18F/agency engagements 81 | * Review transition needs for the program 82 | * Document transition processes 83 | * Begin agency transition and isolate outstanding issues 84 | * Identify outstanding transition issues and address with agency 85 | -------------------------------------------------------------------------------- /pages/project-timeline.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Project Timeline" 4 | permalink: /project-timeline/ 5 | --- 6 | 7 | The engagement will span four months, beginning with the start date of the Inter-Agency Agreement. Below is a timeline for the engagement: 8 | 9 | 10 | ## Month 1 11 | 12 | ### Week 1 13 | 14 | 15 | ### Week 2 16 | 17 | 18 | ### Week 3 19 | 20 | 21 | ### Week 4 22 | 23 | 24 | ### Week 5 25 | 26 | 27 | 28 | ## Month 2 29 | 30 | ### Week 6 31 | 32 | 33 | ### Week 7 34 | 35 | 36 | ### Week 8 37 | 38 | ### Week 9 39 | 40 | 41 | ## Month 3 42 | 43 | ### Week 10 44 | 45 | 46 | ### Week 11 47 | 48 | 49 | ### Week 12 50 | 51 | 52 | ### Week 13 53 | 54 | 55 | 56 | ## Month 4 57 | 58 | 59 | ### Week 14 60 | 61 | 62 | ### Week 15 63 | 64 | ### Week 16 65 | 66 | 67 | ### Week 17 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /pages/sow.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Statement of Work" 4 | permalink: /sow/ 5 | --- 6 | 7 | ## Labor Statement of Work 8 | 9 | ... 10 | 11 | ## Cloud.gov Statement of Work 12 | 13 | ... 14 | 15 | ## Budget 16 | 17 | ... 18 | 19 | -------------------------------------------------------------------------------- /pages/training.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Agency Training" 4 | permalink: /training/ 5 | --- 6 | 7 | 8 | This program is designed to stand up an API capability for your agency as quickly as possible to better enable us to train your team and others at your agency. As a result, we are able to spend the bulk of our time and energy helping you to implement your API program and internalize the knowledge your agency needs to be fully self-sufficient in this area. 9 | 10 | There are four main areas of training in this engagement: 11 | 12 | * Training your team to create, maintain, and update your APIs 13 | * Increasingly complex API design and developer engagement 14 | * Basic 'Intro to APIs' courses for other staff memebers 15 | * Executive API trainings 16 | 17 | For more details on the training options, see the [agency manual](https://pages.18f.gov/api-program/agency-manual). 18 | 19 | 20 | --------------------------------------------------------------------------------