├── .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 |
27 |
28 |
29 |
30 | {% include sidebar.html %}
31 |
32 |
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 |
--------------------------------------------------------------------------------