CINXE.COM
Create ROR-powered forms
<!DOCTYPE html><html lang="en" style="" data-color-mode="light" class=" useReactApp "><head><script src="https://cdn.readme.io/public/js/force-firefox-anchor-jump.js?1733167499735"></script><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="readme-deploy" content="5.237.0"><meta name="readme-subdomain" content="ror"><meta name="readme-version" content="1"><title>Create ROR-powered forms</title><meta name="description" content="This document provides best practices for implementing a typeahead widget that prompts users to select an organization from the ROR registry, capturing creator affiliations and allowing users to search for variant names. It also advises against requiring ROR IDs, allowing users to enter text strings..."><meta property="og:title" content="Create ROR-powered forms"><meta property="og:description" content="This document provides best practices for implementing a typeahead widget that prompts users to select an organization from the ROR registry, capturing creator affiliations and allowing users to search for variant names. It also advises against requiring ROR IDs, allowing users to enter text strings..."><meta property="og:site_name" content="ROR"><meta name="twitter:title" content="Create ROR-powered forms"><meta name="twitter:description" content="This document provides best practices for implementing a typeahead widget that prompts users to select an organization from the ROR registry, capturing creator affiliations and allowing users to search for variant names. It also advises against requiring ROR IDs, allowing users to enter text strings..."><meta name="twitter:card" content="summary_large_image"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta property="og:image" content="https://files.readme.io/4330c08-small-ror-logo-large.png"><meta name="twitter:image" content="https://files.readme.io/4330c08-small-ror-logo-large.png"><link id="favicon" rel="shortcut icon" href="https://files.readme.io/a931430-small-ror-icon-profile_2.png" type="image/png"><link rel="canonical" href="https://ror.readme.io/docs/forms"><script src="https://cdn.readme.io/public/js/cash-dom.min.js?1733167499735"></script><link data-chunk="routes-Reference" rel="preload" as="style" href="https://cdn.readme.io/public/hub/web/routes-Reference.087102afd3bca3215f45.css"> <link data-chunk="Editor" rel="preload" as="style" href="https://cdn.readme.io/public/hub/web/Editor.c9adabeec62cc7e2bd7a.css"> <link data-chunk="routes-Doc" rel="preload" as="style" href="https://cdn.readme.io/public/hub/web/routes-Doc.921b58c17b447c4e783e.css"> <link data-chunk="routes-PageNotFound" rel="preload" as="style" href="https://cdn.readme.io/public/hub/web/routes-PageNotFound.d8afd1171cf7a455eed7.css"> <link data-chunk="Header" rel="preload" as="style" href="https://cdn.readme.io/public/hub/web/Header.1c46140f4fda4e981a8d.css"> <link data-chunk="routes-SuperHub" rel="preload" as="style" href="https://cdn.readme.io/public/hub/web/routes-SuperHub.db8b3beb03eead84c21e.css"> <link data-chunk="routes-SuperHub" rel="preload" as="style" href="https://cdn.readme.io/public/hub/web/8263.75e3fc491ee8103c63a3.css"> <link data-chunk="routes-SuperHub" rel="preload" as="style" href="https://cdn.readme.io/public/hub/web/2395.593cd7b6ba0bdb6787a8.css"> <link data-chunk="main" rel="preload" as="style" href="https://cdn.readme.io/public/hub/web/main.2415ba38e8e5c2ba190e.css"> <link data-chunk="main" rel="preload" as="style" href="https://cdn.readme.io/public/hub/web/ui-styles.a5d24742a3656724b61d.css"> <link data-chunk="main" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/main.c0c0548d7f95cc33138b.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/6859.fc1496da022e612abe33.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/1802.00a1e88cc0d9da2aae1b.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/9772.1912e092b9c8785ff5c3.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/3284.6ecd6ef27e2009d3fdc7.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/7449.dae0332305a8704415a6.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/7372.aa4569536a36087cf4a9.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/9082.f9fa9ec2b80af1ef61bd.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/572.bab1eda8453360a8a761.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/5312.ca2c08ec1b75bb03c21e.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/2406.951963c0cf542b4b86a4.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/2395.6288c030d5183baa5a89.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/6522.057d8ea587133ae98687.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/7112.69c3d611e7e54e411b26.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/73.530027393a282a78b6b8.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/8263.3d098f45b4b562ec80b5.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/1282.591f476c316bf3670bbd.js"> <link data-chunk="routes-SuperHub" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/routes-SuperHub.e3831663c122c753731b.js"> <link data-chunk="Header" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/3880.3892311d81c548cb073c.js"> <link data-chunk="Header" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/7783.48ca7ef3a5c469d97e53.js"> <link data-chunk="Header" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/Header.ad57d9fcd570c04fb712.js"> <link data-chunk="routes-PageNotFound" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/routes-PageNotFound.84a460336ee9c83a7d55.js"> <link data-chunk="Footer" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/Footer.eb98b86c4279989f5a59.js"> <link data-chunk="core-icons-chevron-up-down-svg" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/core-icons-chevron-up-down-svg.6aae957df71e6f4c5e24.js"> <link data-chunk="routes-Doc" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/6841.587d285d41ca8bab11b1.js"> <link data-chunk="routes-Doc" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/6722.7602d4c7190304faffd4.js"> <link data-chunk="routes-Doc" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/routes-Doc.e3a4e0817a9a640436bc.js"> <link data-chunk="core-icons-arrow-right-svg" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/core-icons-arrow-right-svg.eadb74658f93b4e7d75f.js"> <link data-chunk="Editor" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/Editor.a0c700eb9ae5192d6433.js"> <link data-chunk="core-icons-x-circle-svg" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/core-icons-x-circle-svg.abc0e0ea5b7f9dff667c.js"> <link data-chunk="core-icons-suggested-edits-svg" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/core-icons-suggested-edits-svg.8d2d8ac2fd22ded9238d.js"> <link data-chunk="routes-Reference" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/7971.db270c2970b791e38435.js"> <link data-chunk="routes-Reference" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/153.e4db5a313c7d51383015.js"> <link data-chunk="routes-Reference" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/routes-Reference.d66a49f09580aafdabb6.js"> <link data-chunk="core-icons-more-vertical-svg" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/core-icons-more-vertical-svg.4822b3f831e11095980d.js"> <link data-chunk="core-icons-lock-svg" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/core-icons-lock-svg.70942d3ee6bad6267696.js"> <link data-chunk="core-icons-arrow-up-right-svg" rel="preload" as="script" href="https://cdn.readme.io/public/hub/web/core-icons-arrow-up-right-svg.8ec73f7e322d79a2695b.js"> <link data-chunk="main" rel="stylesheet" href="https://cdn.readme.io/public/hub/web/ui-styles.a5d24742a3656724b61d.css"> <link data-chunk="main" rel="stylesheet" href="https://cdn.readme.io/public/hub/web/main.2415ba38e8e5c2ba190e.css"> <link data-chunk="routes-SuperHub" rel="stylesheet" href="https://cdn.readme.io/public/hub/web/2395.593cd7b6ba0bdb6787a8.css"> <link data-chunk="routes-SuperHub" rel="stylesheet" href="https://cdn.readme.io/public/hub/web/8263.75e3fc491ee8103c63a3.css"> <link data-chunk="routes-SuperHub" rel="stylesheet" href="https://cdn.readme.io/public/hub/web/routes-SuperHub.db8b3beb03eead84c21e.css"> <link data-chunk="Header" rel="stylesheet" href="https://cdn.readme.io/public/hub/web/Header.1c46140f4fda4e981a8d.css"> <link data-chunk="routes-PageNotFound" rel="stylesheet" href="https://cdn.readme.io/public/hub/web/routes-PageNotFound.d8afd1171cf7a455eed7.css"> <link data-chunk="routes-Doc" rel="stylesheet" href="https://cdn.readme.io/public/hub/web/routes-Doc.921b58c17b447c4e783e.css"> <link data-chunk="Editor" rel="stylesheet" href="https://cdn.readme.io/public/hub/web/Editor.c9adabeec62cc7e2bd7a.css"> <link data-chunk="routes-Reference" rel="stylesheet" href="https://cdn.readme.io/public/hub/web/routes-Reference.087102afd3bca3215f45.css"><!-- CUSTOM CSS--><style title="rm-custom-css">:root{--project-color-primary:#44A28F;--project-color-inverse:#222;--recipe-button-color:#44A28F;--recipe-button-color-hover:#265a50;--recipe-button-color-active:#173630;--recipe-button-color-focus:rgba(68, 162, 143, 0.25);--recipe-button-color-disabled:#c9e9e2}[id=enterprise] .ReadMeUI[is=AlgoliaSearch]{--project-color-primary:#44A28F;--project-color-inverse:#222}a{color:var(--color-link-primary,#44a28f)}a:hover{color:var(--color-link-primary-darken-5,#265a50)}a.text-muted:hover{color:var(--color-link-primary,#44a28f)}.btn.btn-primary{background-color:#44a28f}.btn.btn-primary:hover{background-color:#265a50}.theme-line #hub-landing-top h2{color:#44a28f}#hub-landing-top .btn:hover{color:#44a28f}.theme-line #hub-landing-top .btn:hover{color:#fff}.theme-solid header#hub-header #header-top{background-color:#44a28f}.theme-solid.header-gradient header#hub-header #header-top{background:linear-gradient(to bottom,#44a28f,#227866)}.theme-solid.header-custom header#hub-header #header-top{background-image:url(undefined)}.theme-line header#hub-header #header-top{border-bottom-color:#44a28f}.theme-line header#hub-header #header-top .btn{background-color:#44a28f}header#hub-header #header-top #header-logo{width:63px;height:40px;margin-top:0;background-image:url(https://files.readme.io/4330c08-small-ror-logo-large.png)}#hub-subheader-parent #hub-subheader .hub-subheader-breadcrumbs .dropdown-menu a:hover{background-color:#44a28f}#subheader-links a.active{color:#44a28f!important;box-shadow:inset 0 -2px 0 #44a28f}#subheader-links a:hover{color:#44a28f!important;box-shadow:inset 0 -2px 0 #44a28f;opacity:.7}.discussion .submit-vote.submit-vote-parent.voted a.submit-vote-button{background-color:#44a28f}section#hub-discuss .discussion a .discuss-body h4{color:#44a28f}section#hub-discuss .discussion a:hover .discuss-body h4{color:#265a50}#hub-subheader-parent #hub-subheader.sticky-header.sticky{border-bottom-color:#44a28f}#hub-subheader-parent #hub-subheader.sticky-header.sticky .search-box{border-bottom-color:#44a28f}#hub-search-results h3 em{color:#44a28f}.main_background,.tag-item{background:#44a28f!important}.main_background:hover{background:#265a50!important}.main_color{color:#44a28f!important}.border_bottom_main_color{border-bottom:2px solid #44a28f}.main_color_hover:hover{color:#44a28f!important}section#hub-discuss h1{color:#44a28f}#hub-reference .hub-api .api-definition .api-try-it-out.active{border-color:#44a28f;background-color:#44a28f}#hub-reference .hub-api .api-definition .api-try-it-out.active:hover{background-color:#265a50;border-color:#265a50}#hub-reference .hub-api .api-definition .api-try-it-out:hover{border-color:#44a28f;color:#44a28f}#hub-reference .hub-reference .logs .logs-empty .logs-login-button,#hub-reference .hub-reference .logs .logs-login .logs-login-button{background-color:var(--project-color-primary,#44a28f);border-color:var(--project-color-primary,#44a28f)}#hub-reference .hub-reference .logs .logs-empty .logs-login-button:hover,#hub-reference .hub-reference .logs .logs-login .logs-login-button:hover{background-color:#265a50;border-color:#265a50}#hub-reference .hub-reference .logs .logs-empty>svg>path,#hub-reference .hub-reference .logs .logs-login>svg>path{fill:#44a28f;fill:var(--project-color-primary,#44a28f)}#hub-reference .hub-reference .logs:last-child .logs-empty,#hub-reference .hub-reference .logs:last-child .logs-login{margin-bottom:35px}#hub-reference .hub-reference .hub-reference-section .hub-reference-left header .hub-reference-edit:hover{color:#44a28f}.main-color-accent{border-bottom:3px solid #44a28f;padding-bottom:8px}/*! BEGIN HUB_CUSTOM_STYLES *//*! END HUB_CUSTOM_STYLES */</style><meta name="loadedProject" content="ror"><script>var storedColorMode = `light` === 'system' ? window.localStorage.getItem('color-scheme') : `light` document.querySelector('[data-color-mode]').setAttribute('data-color-mode', storedColorMode)</script><script id="config" type="application/json" data-json="{"algoliaIndex":"readme_search_v2","amplitude":{"apiKey":"dc8065a65ef83d6ad23e37aaf014fc84","enabled":true},"asset_url":"https://cdn.readme.io","domain":"readme.io","domainFull":"https://dash.readme.com","encryptedLocalStorageKey":"ekfls-2024-05","fullstory":{"enabled":true,"orgId":"FSV9A"},"metrics":{"billingCronEnabled":"true","dashUrl":"https://m.readme.io","defaultUrl":"https://m.readme.io","exportMaxRetries":12,"wsUrl":"wss://m.readme.io"},"proxyUrl":"https://try.readme.io","readmeRecaptchaSiteKey":"6LesVBYpAAAAAESOCHOyo2kF9SZXPVb54Nwf3i2x","releaseVersion":"5.237.0","sentry":{"dsn":"https://3bbe57a973254129bcb93e47dc0cc46f@o343074.ingest.sentry.io/2052166","enabled":true,"tracesSampleRate":0},"shMigration":{"promoVideo":"","forceWaitlist":false},"sslBaseDomain":"readmessl.com","sslGenerationService":"ssl.readmessl.com","stripePk":"pk_live_5103PML2qXbDukVh7GDAkQoR4NSuLqy8idd5xtdm9407XdPR6o3bo663C1ruEGhXJjpnb2YCpj8EU1UvQYanuCjtr00t1DRCf2a","superHub":{"newProjectsEnabled":true},"wootric":{"accountToken":"NPS-122b75a4","enabled":true}}"></script></head><body class="body-none theme-solid header-solid header-bg-size-auto header-bg-pos-tl header-overlay-triangles reference-layout-row lumosity-normal "><div id="ssr-top"></div><div id="ssr-main"><div class="App ThemeContext ThemeContext_dark " style="--color-primary:#44A28F;--color-primary-inverse:#fff;--color-primary-alt:#227866;--color-primary-darken-10:#357e6f;--color-primary-darken-20:#265a50;--color-primary-alpha-25:rgba(68, 162, 143, 0.25);--color-link-primary:#44A28F;--color-link-primary-darken-5:#3c907f;--color-link-primary-darken-10:#357e6f;--color-link-primary-darken-20:#265a50;--color-link-primary-alpha-50:rgba(68, 162, 143, 0.5);--color-link-primary-alpha-25:rgba(68, 162, 143, 0.25);--color-link-background:rgba(68, 162, 143, 0.09);--color-link-text:#fff;--color-login-link:#018ef5;--color-login-link-text:#fff;--color-login-link-darken-10:#0171c2;--color-login-link-primary-alpha-50:rgba(1, 142, 245, 0.5)"><header class="Header3zzata9F_ZPQ rm-Header "><div class="rm-Header-top Header-topuTMpygDG4e1V"><div class="rm-Container rm-Container_flex"><div style="outline:none" tabindex="-1"><a href="#content" target="_self" class="Button Button_md rm-JumpTo Header-jumpTo3IWKQXmhSI5D Button_primary">Jump to Content</a></div><div class="rm-Header-left Header-leftADQdGVqx1wqU"><a class="rm-Logo Header-logo1Xy41PtkzbdG" href="https://ror.org" target="_self"><img alt="ROR" class="rm-Logo-img rm-Logo-img_lg Header-logo-img3YvV4lcGKkeb" src="https://files.readme.io/4330c08-small-ror-logo-large.png"/></a><a class="Button Button_md rm-Header-link rm-Header-top-link Button_slate_text Header-link2tXYTgXq85zW" href="https://github.com/ror-community/ror-roadmap/issues/new/choose" target="_self" to="https://github.com/ror-community/ror-roadmap/issues/new/choose">Report a bug or request a feature</a><a class="Button Button_md rm-Header-link rm-Header-top-link Button_slate_text Header-link2tXYTgXq85zW" href="/cdn-cgi/l/email-protection#34474144445b464074465b461a5b4653" target="_self" to="mailto:support@ror.org">Contact support</a></div><div class="rm-Header-left Header-leftADQdGVqx1wqU Header-left_mobile1RG-X93lx6PF"><div><button aria-label="Toggle navigation menu" class="icon-menu menu3d6DYNDa3tk5" type="button"></button><div class=""><div class="Flyout95xhYIIoTKtc undefined rm-Flyout" data-testid="flyout"><div class="MobileFlyout1hHJpUd-nYkd"><a class="rm-MobileFlyout-item NavItem-item1gDDTqaXGhm1 NavItem-item_mobile1qG3gd-Mkck- " href="/" target="_self"><i class="icon-landing-page-2 NavItem-badge1qOxpfTiALoz"></i><span class="NavItem-textSlZuuL489uiw">Home</span></a><a aria-current="page" class="rm-MobileFlyout-item NavItem-item1gDDTqaXGhm1 NavItem-item_mobile1qG3gd-Mkck- active" href="/docs" target="_self"><i class="icon-guides NavItem-badge1qOxpfTiALoz"></i><span class="NavItem-textSlZuuL489uiw">Guides</span></a><a class="rm-MobileFlyout-item NavItem-item1gDDTqaXGhm1 NavItem-item_mobile1qG3gd-Mkck- " href="/changelog" target="_self"><i class="icon-changelog NavItem-badge1qOxpfTiALoz"></i><span class="NavItem-textSlZuuL489uiw">Changelog</span></a><select class="Select Select_md NavItem-item1gDDTqaXGhm1 NavItem-item_select3UEfLN-oSjxp NavItem-item_mobile1qG3gd-Mkck-"><option selected="" data-url="#" value="1">v1</option><option data-url="/v2/docs" value="2">v2</option></select><hr class="MobileFlyout-divider10xf7R2X1MeW"/><a class="rm-MobileFlyout-item NavItem-item1gDDTqaXGhm1 NavItem-item_mobile1qG3gd-Mkck- NavItem_dropdown-muted1xJVuczwGc74" href="https://github.com/ror-community/ror-roadmap/issues/new/choose" rel="noopener" target="_blank" to="https://github.com/ror-community/ror-roadmap/issues/new/choose">Report a bug or request a feature</a><a class="rm-MobileFlyout-item NavItem-item1gDDTqaXGhm1 NavItem-item_mobile1qG3gd-Mkck- NavItem_dropdown-muted1xJVuczwGc74" href="/cdn-cgi/l/email-protection#ff8c8a8f8f908d8bbf8d908dd1908d98" target="_self" to="mailto:support@ror.org">Contact support</a><a class="rm-MobileFlyout-item NavItem-item1gDDTqaXGhm1 NavItem-item_mobile1qG3gd-Mkck- NavItem_dropdown-muted1xJVuczwGc74" href="/login?redirect_uri=/docs/forms" target="_self" to="/login?redirect_uri=/docs/forms">Log In</a><a class="MobileFlyout-logo3Lq1eTlk1K76 Header-logo1Xy41PtkzbdG rm-Logo" href="https://ror.org" target="_self"><img alt="ROR" class="Header-logo-img3YvV4lcGKkeb rm-Logo-img" src="https://files.readme.io/4330c08-small-ror-logo-large.png"/></a></div></div></div></div><div class="Header-left-nav2xWPWMNHOGf_"><i class="icon-guides Header-left-nav-icon10glJKFwewOv"></i>Guides</div></div><div class="rm-Header-right Header-right21PC2XTT6aMg"><span class="Header-right_desktop14ja01RUQ7HE"><a href="/login?redirect_uri=/docs/forms" target="_self" class="Button Button_slate_text Button_md Header-link2tXYTgXq85zW undefined NavItem_mdrYO3ChA2kYvP rm-Header-top-link rm-Header-top-link_login Button_primary">Log In</a></span><div class="Header-searchtb6Foi0-D9Vx"><button aria-label="Search" class="rm-SearchToggle" data-symbol="⌘"><div class="rm-SearchToggle-icon icon-search1"></div></button></div></div></div></div><div class="Header-bottom2eLKOFXMEmh5 rm-Header-bottom "><div class="rm-Container rm-Container_flex"><nav class="Header-leftADQdGVqx1wqU"><div class="rm-VersionDropdown Dropdown Dropdown_closed"><button aria-haspopup="dialog" class="Button Button_slate_text Button_md rm-Header-bottom-link Dropdown-toggle Button_primary" type="button"><span>v<!-- -->1</span><i class="icon icon-chevron-down"></i></button></div><a class="Button Button_md rm-Header-link rm-Header-bottom-link Button_slate_text Header-bottom-link_mobile " href="/" target="_self"><i class="icon-landing-page-2"></i><span>Home</span></a><a aria-current="page" class="Button Button_md rm-Header-link rm-Header-bottom-link Button_slate_text Header-bottom-link_mobile active" href="/docs" target="_self"><i class="icon-guides"></i><span>Guides</span></a><a class="Button Button_md rm-Header-link rm-Header-bottom-link Button_slate_text Header-bottom-link_mobile " href="/changelog" target="_self"><i class="icon-changelog"></i><span>Changelog</span></a></nav><button align="center" justify="between" style="--flex-gap:var(--xs)" class="Button Button_sm Flex Flex_row MobileSubnav1DsTfasXloM2 Button_contrast Button_contrast_outline" type="button"><span class="Button-label">Create ROR-powered forms</span><span class="IconWrapper Icon-wrapper2z2wVIeGsiUy"><svg fill="none" viewBox="0 0 24 24" class="Icon Icon3_D2ysxFZ_ll Icon-svg2Lm7f6G9Ly5a" data-name="chevron-up-down" role="img" style="--icon-color:inherit;--icon-size:inherit;--icon-stroke-width:2px"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m6 16 6 6 6-6M18 8l-6-6-6 6" class="icon-stroke-width"></path></svg></span></button><div class="rm-Header-search Header-searchtb6Foi0-D9Vx rm-Header-search_feather Header-search_featherYsmQBn55F3d9"><button aria-label="Search" class="rm-SearchToggle" data-symbol="⌘"><div class="rm-SearchToggle-icon icon-search1"></div><div class="Header-search-placeholder3Vx4OmMPcjAi rm-SearchToggle-placeholder">Search</div><div class="rm-SearchToggle-shortcut"></div></button></div></div></div><div class="hub-search-results--reactApp " id="hub-search-results"><div class="hub-container"><div class="modal-backdrop show-modal rm-SearchModal" role="button" tabindex="0"></div></div></div></header><main class="rm-Guides"><div class="rm-Container rm-Container_flex"><nav aria-label="Page navigation" class="rm-Sidebar hub-sidebar reference-redesign Nav3C5f8FcjkaHj rm-Sidebar_guides" id="hub-sidebar"><div class="Sidebar1t2G1ZJq-vU1 rm-Sidebar hub-sidebar-content"><section class="Sidebar-listWrapper6Q9_yUrG906C rm-Sidebar-section"><h2 class="Sidebar-headingTRQyOa2pk0gh rm-Sidebar-heading">Getting Started with ROR</h2><ul class="Sidebar-list3cZWQLaBf9k8 rm-Sidebar-list"><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/identifier"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Identifier pattern</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/display"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Logos and display guidelines</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/integrations"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">See who uses ROR</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/get-involved"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Get involved</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/feedback-docs"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Community feedback documents</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/contact"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Contact us</span></span></a></li></ul></section><section class="Sidebar-listWrapper6Q9_yUrG906C rm-Sidebar-section"><h2 class="Sidebar-headingTRQyOa2pk0gh rm-Sidebar-heading">ROR Metadata</h2><ul class="Sidebar-list3cZWQLaBf9k8 rm-Sidebar-list"><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/updates"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Updates and curation</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/data-structure"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Data structure</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/fields"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Fields and sub-fields</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/relationships"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Relationships and hierarchies</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/schema-versions"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Schema versions</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/schema-v2"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Schema 2.0</span></span></a></li></ul></section><section class="Sidebar-listWrapper6Q9_yUrG906C rm-Sidebar-section"><h2 class="Sidebar-headingTRQyOa2pk0gh rm-Sidebar-heading">ROR REST API</h2><ul class="Sidebar-list3cZWQLaBf9k8 rm-Sidebar-list"><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/rest-api"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">About the ROR REST API</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/api-single"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Retrieve a single record</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/api-list"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Retrieve a list of records</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/api-filtering"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Filtering</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/api-paging"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Paging</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/api-query"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Query parameter</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/api-advanced-query"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Advanced query parameter</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/api-affiliation"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Affiliation parameter</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/api-versions"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">API versions</span></span></a></li></ul></section><section class="Sidebar-listWrapper6Q9_yUrG906C rm-Sidebar-section"><h2 class="Sidebar-headingTRQyOa2pk0gh rm-Sidebar-heading">Tools & Services</h2><ul class="Sidebar-list3cZWQLaBf9k8 rm-Sidebar-list"><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/data-dump"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Data dump</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/web-search"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Web search</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/openrefine-reconciler"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">OpenRefine reconciler</span></span></a></li></ul></section><section class="Sidebar-listWrapper6Q9_yUrG906C rm-Sidebar-section"><h2 class="Sidebar-headingTRQyOa2pk0gh rm-Sidebar-heading">Collecting ROR IDs</h2><ul class="Sidebar-list3cZWQLaBf9k8 rm-Sidebar-list"><li class="Sidebar-item23D-2Kd61_k3"><a aria-current="page" class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link active" target="_self" href="/docs/forms"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Create ROR-powered forms</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/matching"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Match organization names to ROR IDs</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/mapping"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Map other organization IDs to ROR IDs</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/grid"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Transition from GRID to ROR</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/funder-registry"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Transition from Open Funder Registry to ROR</span></span></a></li></ul></section><section class="Sidebar-listWrapper6Q9_yUrG906C rm-Sidebar-section"><h2 class="Sidebar-headingTRQyOa2pk0gh rm-Sidebar-heading">Sending ROR IDs</h2><ul class="Sidebar-list3cZWQLaBf9k8 rm-Sidebar-list"><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/crossref"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Add ROR IDs to Crossref DOIs</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/datacite"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Add ROR IDs to DataCite DOIs</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/jats"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Add ROR IDs to JATS XML</span></span></a></li><li class="Sidebar-item23D-2Kd61_k3"><a class="Sidebar-link2Dsha-r-GKh2 childless text-wrap rm-Sidebar-link" target="_self" href="/docs/orcid"><span class="Sidebar-link-textLuTE1ySm4Kqn"><span class="Sidebar-link-text_label1gCT_uPnx7Gu">Add ROR IDs to ORCID records</span></span></a></li></ul></section><div class="readme-logo" id="readmeLogo">Powered by <a aria-label="ReadMe" href="https://readme.com?ref_src=hub&project=ror" style="color:unset"><i class="icon icon-readme" style="display:inline-block;min-width:71px"></i></a></div></div></nav><article class="rm-Article " id="content"><header id="content-head"><div class="row clearfix"><div class="col-xs-9"><h1>Create ROR-powered forms</h1></div><div class="col-xs-3"><a class="suggestEdits" rel="nofollow" href="/edit/forms"><i aria-hidden="true" class="icon icon-edit"></i> Suggest Edits</a></div></div></header><div class="grid-container-fluid" id="content-container"><section class="content-body grid-75"><div dehydrated="<blockquote class="callout callout_warn" theme="🚧"><h2 class="callout-heading"><span class="callout-icon">🚧</span><p>Using ROR with standard form solutions</p></h2><p>The information on this page is aimed at developers who are building and maintaining web applications that include custom forms. If you are using a standard form solution such as Google Forms, we recommend collecting organization names as text in your form, generating a CSV file from the form responses, and then <a href="/docs/matching" target="" title="" class="doc-link" data-sidebar="matching">matching the organization names to ROR IDs</a>.</p></blockquote> <p>If your system includes fields that users enter affiliation information into, you can standardize that input and capture corresponding ROR IDs by adding a typeahead (or &quot;autosuggest&quot;) widget that prompts users to select an organization from ROR. Learn more about best practices and implementation steps for using ROR in your application&#x27;s forms here. </p> <p><span aria-label="ROR typeahead demo showing a user entering variations on the name Cracow University of Economics into a form" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="ROR typeahead demo showing a user entering variations on the name Cracow University of Economics into a form" loading="lazy" src="https://files.readme.io/4f93231-cracow-ror-typeahead-new.gif" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h1 class="heading heading-1 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="general-best-practices"></div><div class="heading-text"><div id="section-general-best-practices" class="heading-anchor_backwardsCompatibility"></div>General best practices</div><a aria-label="Skip link to General best practices" class="heading-anchor-icon fa fa-anchor" href="#general-best-practices"></a></h1> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="capture-affiliation-with-ror"></div><div class="heading-text"><div id="section-capture-affiliation-with-ror" class="heading-anchor_backwardsCompatibility"></div>Capture affiliation with ROR</div><a aria-label="Skip link to Capture affiliation with ROR" class="heading-anchor-icon fa fa-anchor" href="#capture-affiliation-with-ror"></a></h2> <p>Use a ROR-powered typeahead to capture creator affiliations (e.g., University of Wisconsin-Madison). Department, college, and other sub-units should be captured in a separate field, as in the examples below.</p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="allow-users-to-search-for-variant-names"></div><div class="heading-text"><div id="section-allow-users-to-search-for-variant-names" class="heading-anchor_backwardsCompatibility"></div>Allow users to search for variant names</div><a aria-label="Skip link to Allow users to search for variant names" class="heading-anchor-icon fa fa-anchor" href="#allow-users-to-search-for-variant-names"></a></h2> <p>The fields <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">name</code>, <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">acronyms</code>, <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">aliases</code>, and <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">labels</code> all include variations on an organization&#x27;s name, any of which a user might and should be able to search for. The <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">?query</code> parameter of the ROR API will search an index of all these fields, but if you build your own search logic, make sure you configure your typeahead to allow searching for the values in any and all name-related fields. </p> <p>In the below example, the ROR record for the University of Wisconsin-Madison, <a href="https://ror.org/01y2jtd41" target="" title="">https://ror.org/01y2jtd41</a>, has the single value &quot;University of Wisconsin-Madison&quot; in the <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">name</code> field, the value &quot;UW-Madison&quot; in the <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">aliases</code> field, the value <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">UW</code> in the <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">acronyms</code> field, and the organization&#x27;s name in French and Spanish in the <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">labels</code> field. All values are searchable. </p> <span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://files.readme.io/8f07cc7-ror-typeahead-UW-Madison.png" align="center" class="" caption="" height="auto" title="" width="auto"/></span></span> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="show-information-beyond-the-primary-organization-name"></div><div class="heading-text"><div id="section-show-information-beyond-the-primary-organization-name" class="heading-anchor_backwardsCompatibility"></div>Show information beyond the primary organization name</div><a aria-label="Skip link to Show information beyond the primary organization name" class="heading-anchor-icon fa fa-anchor" href="#show-information-beyond-the-primary-organization-name"></a></h2> <p>In addition to the primary organization name, display other ROR record fields in order to help users select the correct organization. We recommend including:</p> <ul> <li> <p>Name variations such as <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">acronyms</code>, <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">aliases</code>, and names in other languages (stored in the <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">labels</code> field). This is particularly important because a user&#x27;s query should be able to match a name variation rather than the primary name in a ROR record.</p> </li> <li> <p>Geographic information such as city and country.</p> </li> <li> <p>Organization type.</p> </li> </ul> <p>We do not recommend displaying ROR IDs to end users.</p> <blockquote class="callout callout_info" theme="📘"><h2 class="callout-heading"><span class="callout-icon">📘</span><p>Special considerations for displaying geographical information from ROR</p></h2><h3 class="heading heading-3 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="us-states"></div><div class="heading-text"><div id="section-u-s-states" class="heading-anchor_backwardsCompatibility"></div>U.S. states</div><a aria-label="Skip link to U.S. states" class="heading-anchor-icon fa fa-anchor" href="#us-states"></a></h3><p>Beginning with <a href="/docs/schema-v2" target="" title="" class="doc-link" data-sidebar="schema-v2">Schema 2.0</a>, ROR metadata does not include U.S. states. ROR is a global registry, and most countries do not have an administrative region corresponding to the U.S. state. Note that our analysis shows that <strong>there appear to be no records with duplicate name, city, and country</strong> in the ROR registry, so users should be able to choose the correct organization based on name, city, and country alone, e.g., &quot;York University, Toronto, Canada&quot; (<a href="https://ror.org/05fq50484" target="" title="">https://ror.org/05fq50484</a>), &quot;York University, York, United States&quot; (<a href="https://ror.org/022jz8688" target="" title="">https://ror.org/022jz8688</a>) and &quot;York College, York, United Kingdom&quot; (<a href="https://ror.org/04gaeyc40" target="" title="">https://ror.org/04gaeyc40</a>). Developers who do wish to display state-level values can retrieve them from GeoNames using the GeoNames ID in the ROR record. </p><h3 class="heading heading-3 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="multiple-locations"></div><div class="heading-text"><div id="section-multiple-locations" class="heading-anchor_backwardsCompatibility"></div>Multiple locations</div><a aria-label="Skip link to Multiple locations" class="heading-anchor-icon fa fa-anchor" href="#multiple-locations"></a></h3><p>Beginning with <a href="/docs/schema-v2" target="" title="" class="doc-link" data-sidebar="schema-v2">Schema 2.0</a>, ROR metadata supports multiple locations in a single ROR record. The large majority of ROR records include only a single location; <a href="https://github.com/ror-community/ror-updates/wiki/ROR-Metadata-Policies#multiple-locations" target="" title="">ROR metadata policies</a> outline the rare circumstances in which a ROR record will qualify for multiple locations. Developers who wish to pull location information from ROR should plan to accommodate multiple locations, for example by displaying all locations in a drop down or typeahead. In cases where records have multiple locations, no priority is specified and order is not significant. For this reason, displaying only the first location may not be appropriate for all cases. Additionally, in some cases, developers may wish to allow users to edit location fields within their application(s) to reflect the actual location of the user rather than forcing the use of a location from a ROR record.</p></blockquote> <span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://files.readme.io/e3533da-ror-typeahead-University-of-Wisc-Madison.png" align="center" class="" caption="" height="auto" title="" width="auto"/></span></span> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="do-not-require-the-ror-id"></div><div class="heading-text"><div id="section-do-not-require-the-ror-id" class="heading-anchor_backwardsCompatibility"></div>Do not require the ROR ID</div><a aria-label="Skip link to Do not require the ROR ID" class="heading-anchor-icon fa fa-anchor" href="#do-not-require-the-ror-id"></a></h2> <p>We strongly discourage requiring users to enter only organizations with ROR IDs, because there are many valid reasons why a user may be unable to select an organization with a ROR ID as their affiliation: </p> <ul> <li>The user may be affiliated with a research organization that is in scope for ROR but has not yet been added to the registry</li> <li>The user may be affiliated with a research organization that is not in scope for ROR, such as a single-person consultancy</li> <li>The user may be an independent researcher</li> </ul> <p>Forms can still require users to give an institutional affiliation by allowing users to enter free text strings if no appropriate suggestion is made by the ROR typeahead.</p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="do-not-allow-editing-of-the-ror-organization-name"></div><div class="heading-text"><div id="section-do-not-allow-editing-of-the-ror-organization-name" class="heading-anchor_backwardsCompatibility"></div>Do not allow editing of the ROR organization name</div><a aria-label="Skip link to Do not allow editing of the ROR organization name" class="heading-anchor-icon fa fa-anchor" href="#do-not-allow-editing-of-the-ror-organization-name"></a></h2> <p>After a user chooses an organization from the list, don&#x27;t allow them to edit the name, as this will likely result in incorrectly matched ROR IDs. Instead, prompt them to choose a new organization from the ROR list or else enter an organization name as a free text string.</p> <p><span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://lh4.googleusercontent.com/s2orC1Hyx-blwbnAwAT2zvBEaU8jLZlvHXd_MBGoO41BRCvo8GZZtlFG_rkXet4mJwbA_sGT_LjOX0EsYhyJulpli2LTy9Kc_-U9rNap04olBUXQ5qb902aMnJrFw7wPLSkYd8UP5G2tYY47chwCqVZ7T7MBZ6toR_0ns_SYXOKjLC9sW2U7VgrQie2b" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="allow-entering-a-text-string-if-no-ror-match-is-found"></div><div class="heading-text"><div id="section-allow-entering-a-text-string-if-no-ror-match-is-found" class="heading-anchor_backwardsCompatibility"></div>Allow entering a text string if no ROR match is found</div><a aria-label="Skip link to Allow entering a text string if no ROR match is found" class="heading-anchor-icon fa fa-anchor" href="#allow-entering-a-text-string-if-no-ror-match-is-found"></a></h2> <p>Allow the user to enter the organization name as a text string if no appropriate option is suggested by the typeahead.</p> <p><span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://lh6.googleusercontent.com/lZl0oiKuYUAytx8H-Rv9Oa93tcVCOtqhR6vrQlEnz5D3RxAy4hwV0Luja73MaHa4q6AqLFea4FHJzYfdDDCiXtH1QQdTcXcKy-_2-US5rEr3rSrUqxJIa8mgG0jya0k5_hQqJgbwrdqujOrpoly7Fb1Gn1h3Xsy54ohcyueV-OBZfU023GC0TI2bBrMS" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="allow-users-to-provide-multiple-affiliations"></div><div class="heading-text"><div id="section-allow-users-to-provide-multiple-affiliations" class="heading-anchor_backwardsCompatibility"></div>Allow users to provide multiple affiliations</div><a aria-label="Skip link to Allow users to provide multiple affiliations" class="heading-anchor-icon fa fa-anchor" href="#allow-users-to-provide-multiple-affiliations"></a></h2> <p>Allow users to provide multiple affiliations, since many users are affiliated with multiple organizations. In addition, many users are affiliated with <strong>both</strong> a high-level organization such as the <a href="https://ror.org/01y2jtd41" target="" title="">University of Wisconsin-Madison</a> <strong>and</strong> a &quot;child&quot; research organization such as the <a href="https://ror.org/05cb4rb43" target="" title="">Morgridge Institute for Research</a>. Making the ROR-powered institutional affiliation field repeatable enables users to provide both affiliations. </p> <p>See <a href="/docs/relationships" target="" title="" class="doc-link" data-sidebar="relationships">ROR hierarchies and relationships</a> for more information about parent, child, and sibling research organizations in ROR.</p> <p><span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://files.readme.io/7b7847d-typeahead-morgridge.png" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="follow-accessibility-best-practices"></div><div class="heading-text"><div id="section-follow-accessibility-best-practices" class="heading-anchor_backwardsCompatibility"></div>Follow accessibility best practices</div><a aria-label="Skip link to Follow accessibility best practices" class="heading-anchor-icon fa fa-anchor" href="#follow-accessibility-best-practices"></a></h2> <p>Follow accessibility best practices for form controls, such <a href="https://www.w3.org/WAI/" target="" title="">W3C Web accessibility initiative (WAI)</a>, including:</p> <ul> <li> <p>Label and group form controls correctly</p> </li> <li> <p>Include form instructions in a way that can be read by assistive technologies, such as screen readers</p> </li> <li> <p>Ensure that keyboard/tab navigation is possible</p> </li> <li> <p>Ensure that form controls function at a variety of screen sizes/zoom levels</p> </li> <li> <p>Ensure that colors with sufficient contrast are used, and that color alone is not used to convey information</p> </li> </ul> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="consider-filtering-the-list-of-suggestions-displayed-to-the-user"></div><div class="heading-text"><div id="section-consider-filtering-the-list-of-suggestions-displayed-to-the-user" class="heading-anchor_backwardsCompatibility"></div>Consider filtering the list of suggestions displayed to the user</div><a aria-label="Skip link to Consider filtering the list of suggestions displayed to the user" class="heading-anchor-icon fa fa-anchor" href="#consider-filtering-the-list-of-suggestions-displayed-to-the-user"></a></h2> <p>Consider <a href="/docs/api-filtering" target="" title="" class="doc-link" data-sidebar="api-filtering">Filtering</a> the list of suggestions displayed to the user based on context, such as the user&#x27;s email domain, organization type, or location (either browser geolocation or location information entered in other fields on the same form).</p> <p><span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://lh3.googleusercontent.com/nr_HsqKJoVWObgIx27yqGTZNx84kWzSFUxQUwEercYX-01H1FzdYN2c0w5_hlTUbzoZd3nMsQVDexwhbdpQTH1-MWFotYjIhNyQ6d0IvLmP4JPbo6Zc2qBqAu54vaTiCjjRPSeMhCfTIyyPsybmSUGMpVKLBDaGAi8eX9C1Hav--EoI_A9E6itkT3rVh" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="consider-populating-other-fields-using-ror-data"></div><div class="heading-text"><div id="section-consider-populating-other-fields-using-ror-data" class="heading-anchor_backwardsCompatibility"></div>Consider populating other fields using ROR data</div><a aria-label="Skip link to Consider populating other fields using ROR data" class="heading-anchor-icon fa fa-anchor" href="#consider-populating-other-fields-using-ror-data"></a></h2> <p>Consider populating other fields in your form automatically using data from the ROR record selected by the user. See the list of ROR record fields in <a href="/docs/data-structure" target="" title="" class="doc-link" data-sidebar="data-structure">ROR data structure</a>.</p> <p><span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://lh6.googleusercontent.com/aTclvWe9JZnZaMLH7W6e6tT91l1YC_TrpfOoDVgW1dRHY7vqxY2AOxORlSU3T2Ixfjz6vREyMjhooVAaVVQGv7ua20EqM9VaI-arubiYV6lEOjIKvcx59TB2zeMHydV7kNf9XeKAOPP5XVkKRbynRwl9ROTVtHtT8-86HUhpsJNP-95ZWVRqXTWkHzEZ" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h1 class="heading heading-1 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="implementation-approaches"></div><div class="heading-text"><div id="section-implementation-approaches" class="heading-anchor_backwardsCompatibility"></div>Implementation approaches</div><a aria-label="Skip link to Implementation approaches" class="heading-anchor-icon fa fa-anchor" href="#implementation-approaches"></a></h1> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="ror-api"></div><div class="heading-text"><div id="section-ror-api" class="heading-anchor_backwardsCompatibility"></div>ROR API</div><a aria-label="Skip link to ROR API" class="heading-anchor-icon fa fa-anchor" href="#ror-api"></a></h2> <p>A simple way to populate a typeahead widget is to query the ROR <a href="/docs/rest-api" target="" title="" class="doc-link" data-sidebar="rest-api">REST API</a> in real time as the user types. While this approach has the advantage of being easy to implement, it comes with some disadvantages:</p> <ul> <li> <p>Slower/more variable response time vs querying data stored locally</p> </li> <li> <p>Depends on being able to reach the ROR API</p> </li> <li> <p>Performance may be impacted by other ROR API users</p> </li> </ul> <p>Steps to implement a typeahead widget using the ROR <a href="/docs/rest-api" target="" title="" class="doc-link" data-sidebar="rest-api">REST API</a> will vary depending on your system architecture, but may include the following:</p> <ol> <li>Send user input to the ROR API.</li> </ol> <p>As the user types their affiliation, send the input to the ROR API. We recommend using the <a href="/docs/api-query" target="" title="" class="doc-link" data-sidebar="api-query">query parameter</a> search. You may also wish to first <a href="/docs/api-about#heartbeat" target="" title="" class="doc-link" data-sidebar="api-about#heartbeat">check the heartbeat of the ROR API</a>. </p> <ol start="2"> <li>Parse results.</li> </ol> <p>Results are returned as a list of ROR records, ordered by matching score. Note that the matching score itself is not returned. Results are paginated, and the first 20 results are returned by default. See example responses in the <a href="/docs/api-query" target="" title="" class="doc-link" data-sidebar="api-query">Query parameter</a> section of the REST API guide. </p> <ol start="3"> <li>Display results.</li> </ol> <p>Display the top results to the user. In addition to the name, include information from ROR like acronyms, aliases, names in other languages, city, country, URL and organization type to help the user choose the correct result. We do not recommend displaying ROR IDs to users.</p> <ol start="4"> <li>Store selected result.</li> </ol> <p>Store the ROR ID for the selected result in your system along with any other required information. We recommend storing and displaying ROR IDs as full URLs in the form <a href="https://ror.org/01y2jtd41" target="" title="">https://ror.org/01y2jtd41</a>. Read more about the <a href="/docs/identifier" target="" title="" class="doc-link" data-sidebar="identifier">ROR identifier pattern</a>.</p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="ror-data-dump"></div><div class="heading-text"><div id="section-ror-data-dump" class="heading-anchor_backwardsCompatibility"></div>ROR data dump</div><a aria-label="Skip link to ROR data dump" class="heading-anchor-icon fa fa-anchor" href="#ror-data-dump"></a></h2> <p>Regardless of the source data, typeahead widgets perform faster when querying data stored locally vs making requests to external resources.</p> <p>While performance is much better and both data and search results can be tuned to meet the needs of a particular system, this approach requires more initial development time, as well as ongoing maintenance.</p> <p>Steps to implement a widget using the ROR <a href="/docs/data-dump" target="" title="" class="doc-link" data-sidebar="data-dump">data dump</a> vary depending on your system architecture, but may include the following:</p> <ol> <li> <p>Download and parse the ROR data dump into a local database.</p> </li> <li> <p>Create a search index.</p> </li> <li> <p>Create an internal API endpoint with logic to query the search index.</p> </li> <li> <p>Use your internal API endpoint to populate your typeahead widget, following the best practices above.</p> </li> <li> <p>Update your database and search index when new ROR data dumps are released.</p> </li> </ol> <h1 class="heading heading-1 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="typeahead-demos-and-code"></div><div class="heading-text"><div id="section-typeahead-demos-and-code" class="heading-anchor_backwardsCompatibility"></div>Typeahead demos and code</div><a aria-label="Skip link to Typeahead demos and code" class="heading-anchor-icon fa fa-anchor" href="#typeahead-demos-and-code"></a></h1> <ul> <li>Try our demonstration version of a ROR typeahead at <a href="https://ror-community.github.io/ror-typeahead-demos/" target="" title="">https://ror-community.github.io/ror-typeahead-demos/</a></li> <li>Take a look at the code for our ROR typeahead demos at <a href="https://github.com/ror-community/ror-typeahead-demos" target="" title="">https://github.com/ror-community/ror-typeahead-demos</a></li> </ul>" style="margin-left:31px" class="rm-Markdown markdown-body rm-Markdown markdown-body ng-non-bindable" data-testid="RDMD"><blockquote class="callout callout_warn" theme="🚧"><h2 class="callout-heading"><span class="callout-icon">🚧</span><p>Using ROR with standard form solutions</p></h2><p>The information on this page is aimed at developers who are building and maintaining web applications that include custom forms. If you are using a standard form solution such as Google Forms, we recommend collecting organization names as text in your form, generating a CSV file from the form responses, and then <a target="_self" href="/docs/matching">matching the organization names to ROR IDs</a>.</p></blockquote> <p>If your system includes fields that users enter affiliation information into, you can standardize that input and capture corresponding ROR IDs by adding a typeahead (or "autosuggest") widget that prompts users to select an organization from ROR. Learn more about best practices and implementation steps for using ROR in your application's forms here. </p> <p><span aria-label="ROR typeahead demo showing a user entering variations on the name Cracow University of Economics into a form" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="ROR typeahead demo showing a user entering variations on the name Cracow University of Economics into a form" loading="lazy" src="https://files.readme.io/4f93231-cracow-ror-typeahead-new.gif" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h1 class="heading heading-1 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="general-best-practices"></div><div class="heading-text"><div id="section-general-best-practices" class="heading-anchor_backwardsCompatibility"></div>General best practices</div><a aria-label="Skip link to General best practices" class="heading-anchor-icon fa fa-anchor" href="#general-best-practices"></a></h1> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="capture-affiliation-with-ror"></div><div class="heading-text"><div id="section-capture-affiliation-with-ror" class="heading-anchor_backwardsCompatibility"></div>Capture affiliation with ROR</div><a aria-label="Skip link to Capture affiliation with ROR" class="heading-anchor-icon fa fa-anchor" href="#capture-affiliation-with-ror"></a></h2> <p>Use a ROR-powered typeahead to capture creator affiliations (e.g., University of Wisconsin-Madison). Department, college, and other sub-units should be captured in a separate field, as in the examples below.</p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="allow-users-to-search-for-variant-names"></div><div class="heading-text"><div id="section-allow-users-to-search-for-variant-names" class="heading-anchor_backwardsCompatibility"></div>Allow users to search for variant names</div><a aria-label="Skip link to Allow users to search for variant names" class="heading-anchor-icon fa fa-anchor" href="#allow-users-to-search-for-variant-names"></a></h2> <p>The fields <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">name</code>, <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">acronyms</code>, <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">aliases</code>, and <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">labels</code> all include variations on an organization's name, any of which a user might and should be able to search for. The <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">?query</code> parameter of the ROR API will search an index of all these fields, but if you build your own search logic, make sure you configure your typeahead to allow searching for the values in any and all name-related fields. </p> <p>In the below example, the ROR record for the University of Wisconsin-Madison, <a target="_self" href="https://ror.org/01y2jtd41">https://ror.org/01y2jtd41</a>, has the single value "University of Wisconsin-Madison" in the <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">name</code> field, the value "UW-Madison" in the <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">aliases</code> field, the value <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">UW</code> in the <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">acronyms</code> field, and the organization's name in French and Spanish in the <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">labels</code> field. All values are searchable. </p> <span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://files.readme.io/8f07cc7-ror-typeahead-UW-Madison.png" align="center" class="" caption="" height="auto" title="" width="auto"/></span></span> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="show-information-beyond-the-primary-organization-name"></div><div class="heading-text"><div id="section-show-information-beyond-the-primary-organization-name" class="heading-anchor_backwardsCompatibility"></div>Show information beyond the primary organization name</div><a aria-label="Skip link to Show information beyond the primary organization name" class="heading-anchor-icon fa fa-anchor" href="#show-information-beyond-the-primary-organization-name"></a></h2> <p>In addition to the primary organization name, display other ROR record fields in order to help users select the correct organization. We recommend including:</p> <ul> <li> <p>Name variations such as <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">acronyms</code>, <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">aliases</code>, and names in other languages (stored in the <button aria-label="Copy Code" class="rdmd-code-copy fa"></button><code class="rdmd-code lang- theme-light" data-lang="" name="" tabindex="0">labels</code> field). This is particularly important because a user's query should be able to match a name variation rather than the primary name in a ROR record.</p> </li> <li> <p>Geographic information such as city and country.</p> </li> <li> <p>Organization type.</p> </li> </ul> <p>We do not recommend displaying ROR IDs to end users.</p> <blockquote class="callout callout_info" theme="📘"><h2 class="callout-heading"><span class="callout-icon">📘</span><p>Special considerations for displaying geographical information from ROR</p></h2><h3 class="heading heading-3 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="us-states"></div><div class="heading-text"><div id="section-u-s-states" class="heading-anchor_backwardsCompatibility"></div>U.S. states</div><a aria-label="Skip link to U.S. states" class="heading-anchor-icon fa fa-anchor" href="#us-states"></a></h3><p>Beginning with <a target="_self" href="/docs/schema-v2">Schema 2.0</a>, ROR metadata does not include U.S. states. ROR is a global registry, and most countries do not have an administrative region corresponding to the U.S. state. Note that our analysis shows that <strong>there appear to be no records with duplicate name, city, and country</strong> in the ROR registry, so users should be able to choose the correct organization based on name, city, and country alone, e.g., "York University, Toronto, Canada" (<a target="_self" href="https://ror.org/05fq50484">https://ror.org/05fq50484</a>), "York University, York, United States" (<a target="_self" href="https://ror.org/022jz8688">https://ror.org/022jz8688</a>) and "York College, York, United Kingdom" (<a target="_self" href="https://ror.org/04gaeyc40">https://ror.org/04gaeyc40</a>). Developers who do wish to display state-level values can retrieve them from GeoNames using the GeoNames ID in the ROR record. </p><h3 class="heading heading-3 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="multiple-locations"></div><div class="heading-text"><div id="section-multiple-locations" class="heading-anchor_backwardsCompatibility"></div>Multiple locations</div><a aria-label="Skip link to Multiple locations" class="heading-anchor-icon fa fa-anchor" href="#multiple-locations"></a></h3><p>Beginning with <a target="_self" href="/docs/schema-v2">Schema 2.0</a>, ROR metadata supports multiple locations in a single ROR record. The large majority of ROR records include only a single location; <a target="_self" href="https://github.com/ror-community/ror-updates/wiki/ROR-Metadata-Policies#multiple-locations">ROR metadata policies</a> outline the rare circumstances in which a ROR record will qualify for multiple locations. Developers who wish to pull location information from ROR should plan to accommodate multiple locations, for example by displaying all locations in a drop down or typeahead. In cases where records have multiple locations, no priority is specified and order is not significant. For this reason, displaying only the first location may not be appropriate for all cases. Additionally, in some cases, developers may wish to allow users to edit location fields within their application(s) to reflect the actual location of the user rather than forcing the use of a location from a ROR record.</p></blockquote> <span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://files.readme.io/e3533da-ror-typeahead-University-of-Wisc-Madison.png" align="center" class="" caption="" height="auto" title="" width="auto"/></span></span> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="do-not-require-the-ror-id"></div><div class="heading-text"><div id="section-do-not-require-the-ror-id" class="heading-anchor_backwardsCompatibility"></div>Do not require the ROR ID</div><a aria-label="Skip link to Do not require the ROR ID" class="heading-anchor-icon fa fa-anchor" href="#do-not-require-the-ror-id"></a></h2> <p>We strongly discourage requiring users to enter only organizations with ROR IDs, because there are many valid reasons why a user may be unable to select an organization with a ROR ID as their affiliation: </p> <ul> <li>The user may be affiliated with a research organization that is in scope for ROR but has not yet been added to the registry</li> <li>The user may be affiliated with a research organization that is not in scope for ROR, such as a single-person consultancy</li> <li>The user may be an independent researcher</li> </ul> <p>Forms can still require users to give an institutional affiliation by allowing users to enter free text strings if no appropriate suggestion is made by the ROR typeahead.</p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="do-not-allow-editing-of-the-ror-organization-name"></div><div class="heading-text"><div id="section-do-not-allow-editing-of-the-ror-organization-name" class="heading-anchor_backwardsCompatibility"></div>Do not allow editing of the ROR organization name</div><a aria-label="Skip link to Do not allow editing of the ROR organization name" class="heading-anchor-icon fa fa-anchor" href="#do-not-allow-editing-of-the-ror-organization-name"></a></h2> <p>After a user chooses an organization from the list, don't allow them to edit the name, as this will likely result in incorrectly matched ROR IDs. Instead, prompt them to choose a new organization from the ROR list or else enter an organization name as a free text string.</p> <p><span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://lh4.googleusercontent.com/s2orC1Hyx-blwbnAwAT2zvBEaU8jLZlvHXd_MBGoO41BRCvo8GZZtlFG_rkXet4mJwbA_sGT_LjOX0EsYhyJulpli2LTy9Kc_-U9rNap04olBUXQ5qb902aMnJrFw7wPLSkYd8UP5G2tYY47chwCqVZ7T7MBZ6toR_0ns_SYXOKjLC9sW2U7VgrQie2b" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="allow-entering-a-text-string-if-no-ror-match-is-found"></div><div class="heading-text"><div id="section-allow-entering-a-text-string-if-no-ror-match-is-found" class="heading-anchor_backwardsCompatibility"></div>Allow entering a text string if no ROR match is found</div><a aria-label="Skip link to Allow entering a text string if no ROR match is found" class="heading-anchor-icon fa fa-anchor" href="#allow-entering-a-text-string-if-no-ror-match-is-found"></a></h2> <p>Allow the user to enter the organization name as a text string if no appropriate option is suggested by the typeahead.</p> <p><span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://lh6.googleusercontent.com/lZl0oiKuYUAytx8H-Rv9Oa93tcVCOtqhR6vrQlEnz5D3RxAy4hwV0Luja73MaHa4q6AqLFea4FHJzYfdDDCiXtH1QQdTcXcKy-_2-US5rEr3rSrUqxJIa8mgG0jya0k5_hQqJgbwrdqujOrpoly7Fb1Gn1h3Xsy54ohcyueV-OBZfU023GC0TI2bBrMS" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="allow-users-to-provide-multiple-affiliations"></div><div class="heading-text"><div id="section-allow-users-to-provide-multiple-affiliations" class="heading-anchor_backwardsCompatibility"></div>Allow users to provide multiple affiliations</div><a aria-label="Skip link to Allow users to provide multiple affiliations" class="heading-anchor-icon fa fa-anchor" href="#allow-users-to-provide-multiple-affiliations"></a></h2> <p>Allow users to provide multiple affiliations, since many users are affiliated with multiple organizations. In addition, many users are affiliated with <strong>both</strong> a high-level organization such as the <a target="_self" href="https://ror.org/01y2jtd41">University of Wisconsin-Madison</a> <strong>and</strong> a "child" research organization such as the <a target="_self" href="https://ror.org/05cb4rb43">Morgridge Institute for Research</a>. Making the ROR-powered institutional affiliation field repeatable enables users to provide both affiliations. </p> <p>See <a target="_self" href="/docs/relationships">ROR hierarchies and relationships</a> for more information about parent, child, and sibling research organizations in ROR.</p> <p><span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://files.readme.io/7b7847d-typeahead-morgridge.png" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="follow-accessibility-best-practices"></div><div class="heading-text"><div id="section-follow-accessibility-best-practices" class="heading-anchor_backwardsCompatibility"></div>Follow accessibility best practices</div><a aria-label="Skip link to Follow accessibility best practices" class="heading-anchor-icon fa fa-anchor" href="#follow-accessibility-best-practices"></a></h2> <p>Follow accessibility best practices for form controls, such <a target="_self" href="https://www.w3.org/WAI/">W3C Web accessibility initiative (WAI)</a>, including:</p> <ul> <li> <p>Label and group form controls correctly</p> </li> <li> <p>Include form instructions in a way that can be read by assistive technologies, such as screen readers</p> </li> <li> <p>Ensure that keyboard/tab navigation is possible</p> </li> <li> <p>Ensure that form controls function at a variety of screen sizes/zoom levels</p> </li> <li> <p>Ensure that colors with sufficient contrast are used, and that color alone is not used to convey information</p> </li> </ul> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="consider-filtering-the-list-of-suggestions-displayed-to-the-user"></div><div class="heading-text"><div id="section-consider-filtering-the-list-of-suggestions-displayed-to-the-user" class="heading-anchor_backwardsCompatibility"></div>Consider filtering the list of suggestions displayed to the user</div><a aria-label="Skip link to Consider filtering the list of suggestions displayed to the user" class="heading-anchor-icon fa fa-anchor" href="#consider-filtering-the-list-of-suggestions-displayed-to-the-user"></a></h2> <p>Consider <a target="_self" href="/docs/api-filtering">Filtering</a> the list of suggestions displayed to the user based on context, such as the user's email domain, organization type, or location (either browser geolocation or location information entered in other fields on the same form).</p> <p><span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://lh3.googleusercontent.com/nr_HsqKJoVWObgIx27yqGTZNx84kWzSFUxQUwEercYX-01H1FzdYN2c0w5_hlTUbzoZd3nMsQVDexwhbdpQTH1-MWFotYjIhNyQ6d0IvLmP4JPbo6Zc2qBqAu54vaTiCjjRPSeMhCfTIyyPsybmSUGMpVKLBDaGAi8eX9C1Hav--EoI_A9E6itkT3rVh" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="consider-populating-other-fields-using-ror-data"></div><div class="heading-text"><div id="section-consider-populating-other-fields-using-ror-data" class="heading-anchor_backwardsCompatibility"></div>Consider populating other fields using ROR data</div><a aria-label="Skip link to Consider populating other fields using ROR data" class="heading-anchor-icon fa fa-anchor" href="#consider-populating-other-fields-using-ror-data"></a></h2> <p>Consider populating other fields in your form automatically using data from the ROR record selected by the user. See the list of ROR record fields in <a target="_self" href="/docs/data-structure">ROR data structure</a>.</p> <p><span aria-label="" class="img lightbox closed" role="button" tabindex="0"><span class="lightbox-inner"><img alt="" loading="lazy" src="https://lh6.googleusercontent.com/aTclvWe9JZnZaMLH7W6e6tT91l1YC_TrpfOoDVgW1dRHY7vqxY2AOxORlSU3T2Ixfjz6vREyMjhooVAaVVQGv7ua20EqM9VaI-arubiYV6lEOjIKvcx59TB2zeMHydV7kNf9XeKAOPP5XVkKRbynRwl9ROTVtHtT8-86HUhpsJNP-95ZWVRqXTWkHzEZ" align="" caption="" height="auto" title="" width="auto"/></span></span></p> <h1 class="heading heading-1 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="implementation-approaches"></div><div class="heading-text"><div id="section-implementation-approaches" class="heading-anchor_backwardsCompatibility"></div>Implementation approaches</div><a aria-label="Skip link to Implementation approaches" class="heading-anchor-icon fa fa-anchor" href="#implementation-approaches"></a></h1> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="ror-api"></div><div class="heading-text"><div id="section-ror-api" class="heading-anchor_backwardsCompatibility"></div>ROR API</div><a aria-label="Skip link to ROR API" class="heading-anchor-icon fa fa-anchor" href="#ror-api"></a></h2> <p>A simple way to populate a typeahead widget is to query the ROR <a target="_self" href="/docs/rest-api">REST API</a> in real time as the user types. While this approach has the advantage of being easy to implement, it comes with some disadvantages:</p> <ul> <li> <p>Slower/more variable response time vs querying data stored locally</p> </li> <li> <p>Depends on being able to reach the ROR API</p> </li> <li> <p>Performance may be impacted by other ROR API users</p> </li> </ul> <p>Steps to implement a typeahead widget using the ROR <a target="_self" href="/docs/rest-api">REST API</a> will vary depending on your system architecture, but may include the following:</p> <ol> <li>Send user input to the ROR API.</li> </ol> <p>As the user types their affiliation, send the input to the ROR API. We recommend using the <a target="_self" href="/docs/api-query">query parameter</a> search. You may also wish to first <a target="_self" href="/docs/api-about#heartbeat">check the heartbeat of the ROR API</a>. </p> <ol start="2"> <li>Parse results.</li> </ol> <p>Results are returned as a list of ROR records, ordered by matching score. Note that the matching score itself is not returned. Results are paginated, and the first 20 results are returned by default. See example responses in the <a target="_self" href="/docs/api-query">Query parameter</a> section of the REST API guide. </p> <ol start="3"> <li>Display results.</li> </ol> <p>Display the top results to the user. In addition to the name, include information from ROR like acronyms, aliases, names in other languages, city, country, URL and organization type to help the user choose the correct result. We do not recommend displaying ROR IDs to users.</p> <ol start="4"> <li>Store selected result.</li> </ol> <p>Store the ROR ID for the selected result in your system along with any other required information. We recommend storing and displaying ROR IDs as full URLs in the form <a target="_self" href="https://ror.org/01y2jtd41">https://ror.org/01y2jtd41</a>. Read more about the <a target="_self" href="/docs/identifier">ROR identifier pattern</a>.</p> <h2 class="heading heading-2 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="ror-data-dump"></div><div class="heading-text"><div id="section-ror-data-dump" class="heading-anchor_backwardsCompatibility"></div>ROR data dump</div><a aria-label="Skip link to ROR data dump" class="heading-anchor-icon fa fa-anchor" href="#ror-data-dump"></a></h2> <p>Regardless of the source data, typeahead widgets perform faster when querying data stored locally vs making requests to external resources.</p> <p>While performance is much better and both data and search results can be tuned to meet the needs of a particular system, this approach requires more initial development time, as well as ongoing maintenance.</p> <p>Steps to implement a widget using the ROR <a target="_self" href="/docs/data-dump">data dump</a> vary depending on your system architecture, but may include the following:</p> <ol> <li> <p>Download and parse the ROR data dump into a local database.</p> </li> <li> <p>Create a search index.</p> </li> <li> <p>Create an internal API endpoint with logic to query the search index.</p> </li> <li> <p>Use your internal API endpoint to populate your typeahead widget, following the best practices above.</p> </li> <li> <p>Update your database and search index when new ROR data dumps are released.</p> </li> </ol> <h1 class="heading heading-1 header-scroll" align=""><div class="heading-anchor anchor waypoint" id="typeahead-demos-and-code"></div><div class="heading-text"><div id="section-typeahead-demos-and-code" class="heading-anchor_backwardsCompatibility"></div>Typeahead demos and code</div><a aria-label="Skip link to Typeahead demos and code" class="heading-anchor-icon fa fa-anchor" href="#typeahead-demos-and-code"></a></h1> <ul> <li>Try our demonstration version of a ROR typeahead at <a target="_self" href="https://ror-community.github.io/ror-typeahead-demos/">https://ror-community.github.io/ror-typeahead-demos/</a></li> <li>Take a look at the code for our ROR typeahead demos at <a target="_self" href="https://github.com/ror-community/ror-typeahead-demos">https://github.com/ror-community/ror-typeahead-demos</a></li> </ul></div><div class="UpdatedAt"><p class="DateLine "><i class="icon icon-watch"></i>Updated<!-- --> <!-- -->3 months ago<!-- --> </p></div><hr class="NextStepsDivider"/><div class="WhatsNext-wrapper3DTnpcPqKoHg"><header class="APISectionHeader3LN_-QIR0m7x rm-APISectionHeader WhatsNext-headingQHN33r4trf_s"><div class="APISectionHeader-heading4MUMLbp4_nLs">Other resources you might find helpful</div></header><div class="rm-Markdown markdown-body WhatsNext-description1zZyZLPCGmaa WhatsNext-description_empty1Hh8M1AKGhbW" data-testid="RDMD"></div><ul><li><a class="WhatsNext-link" href="https://ror-community.github.io/ror-typeahead-demos/" target="blank">ROR Typeahead Demos</a><span class="IconWrapper Icon-wrapper2z2wVIeGsiUy"><svg fill="none" viewBox="0 0 24 24" class="Icon Icon3_D2ysxFZ_ll Icon-svg2Lm7f6G9Ly5a icon" data-name="arrow-up-right" role="img" style="--icon-color:inherit;--icon-size:inherit;--icon-stroke-width:2px"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M7 17 17 7M7 7h10v10" class="icon-stroke-width"></path></svg></span></li><li><a class="WhatsNext-link" href="https://github.com/ror-community/ror-typeahead-demos" target="blank">ROR Typeahead Demos code repository</a><span class="IconWrapper Icon-wrapper2z2wVIeGsiUy"><svg fill="none" viewBox="0 0 24 24" class="Icon Icon3_D2ysxFZ_ll Icon-svg2Lm7f6G9Ly5a icon" data-name="arrow-up-right" role="img" style="--icon-color:inherit;--icon-size:inherit;--icon-stroke-width:2px"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M7 17 17 7M7 7h10v10" class="icon-stroke-width"></path></svg></span></li></ul></div></section><section class="content-toc grid-25"><nav><ul class="toc-list"><li><a class="tocHeader" href="#"><i class="icon icon-text-align-left"></i>Table of Contents</a></li><li class="toc-children"><ul> <li> <a href="#general-best-practices">General best practices</a> <ul> <li><a href="#capture-affiliation-with-ror">Capture affiliation with ROR</a></li> <li><a href="#allow-users-to-search-for-variant-names">Allow users to search for variant names</a></li> <li><a href="#show-information-beyond-the-primary-organization-name">Show information beyond the primary organization name</a></li> <li><a href="#do-not-require-the-ror-id">Do not require the ROR ID</a></li> <li><a href="#do-not-allow-editing-of-the-ror-organization-name">Do not allow editing of the ROR organization name</a></li> <li><a href="#allow-entering-a-text-string-if-no-ror-match-is-found">Allow entering a text string if no ROR match is found</a></li> <li><a href="#allow-users-to-provide-multiple-affiliations">Allow users to provide multiple affiliations</a></li> <li><a href="#follow-accessibility-best-practices">Follow accessibility best practices</a></li> <li><a href="#consider-filtering-the-list-of-suggestions-displayed-to-the-user">Consider filtering the list of suggestions displayed to the user</a></li> <li><a href="#consider-populating-other-fields-using-ror-data">Consider populating other fields using ROR data</a></li> </ul> </li> <li> <a href="#implementation-approaches">Implementation approaches</a> <ul> <li><a href="#ror-api">ROR API</a></li> <li><a href="#ror-data-dump">ROR data dump</a></li> </ul> </li> <li> <a href="#typeahead-demos-and-code">Typeahead demos and code</a> </li> </ul></li></ul></nav></section></div><div class="ModalWrapper" id="tutorialmodal-root"></div></article></div></main><footer aria-label="Status banner" class="AppFooter rm-Banners"></footer><div class="ModalWrapper" id="ChatGPT-modal"></div></div></div><div class="ng-non-bindable"><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script id="ssr-props" data-initial-props="{"sidebars":{"docs":[{"_id":"60d25b23765a5900437c8fce","title":"Getting Started with ROR","slug":"getting-started","order":1,"reference":false,"isAPI":false,"project":"6058e47681775f002de04832","version":"6058e47681775f002de04837","createdAt":"2021-06-22T21:50:27.898Z","__v":0,"pages":[{"_id":"62fb961f8d112700211bbf15","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"Identifier pattern","icon":"","type":"basic","slug":"identifier","order":1,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"ror-identifier-pattern","createdAt":"2022-08-16T13:05:35.053Z","category":"60d25b23765a5900437c8fce","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"630d0205f1b18c003de1d215","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"Logos and display guidelines","icon":"","type":"basic","slug":"display","order":2,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"ror-id-display-guidelines-and-logos","createdAt":"2022-08-29T18:14:29.139Z","category":"60d25b23765a5900437c8fce","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"60f8832f8d0c540065cf57a6","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"See who uses ROR","type":"basic","slug":"integrations","order":3,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"ror-integrations","createdAt":"2021-07-21T20:27:27.858Z","category":"60d25b23765a5900437c8fce","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]},{"_id":"60f88138b824e4001ccd7e71","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"title":"Get involved","type":"basic","slug":"get-involved","order":4,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"","createdAt":"2021-07-21T20:19:04.850Z","category":"60d25b23765a5900437c8fce","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]},{"_id":"6466838e94b6bb00501efe6a","api":{"method":"get","url":"","auth":"required","params":[],"examples":{"codes":[]},"results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]}},"title":"Community feedback documents","icon":"","type":"basic","slug":"feedback-docs","order":5,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"community-feedback-documents","category":"60d25b23765a5900437c8fce","createdAt":"2023-05-18T19:59:10.204Z","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"60d5e6e464e12b0055eda723","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"title":"Contact us","type":"basic","slug":"contact","order":6,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"get-in-touch","createdAt":"2021-06-25T14:23:32.577Z","category":"60d25b23765a5900437c8fce","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]}]},{"_id":"65ec6c03aff86d0072a566d7","title":"ROR Metadata","slug":"ror-metadata","order":3,"reference":false,"project":"6058e47681775f002de04832","version":"6058e47681775f002de04837","createdAt":"2024-03-09T14:02:43.834Z","__v":0,"pages":[{"_id":"60d25d9079d8a0002a2a0da0","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"Updates and curation","type":"basic","slug":"updates","order":0,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"how-ror-is-updated","createdAt":"2021-06-22T22:00:48.485Z","category":"65ec6c03aff86d0072a566d7","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]},{"_id":"60d25da0b85dae005598be27","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"Data structure","type":"basic","slug":"data-structure","order":1,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"ror-data-structure","createdAt":"2021-06-22T22:01:04.607Z","category":"65ec6c03aff86d0072a566d7","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]},{"_id":"6441a31ed32dc616a0b51f7b","api":{"method":"get","url":"","auth":"required","params":[]},"title":"Fields and sub-fields","icon":"","type":"basic","slug":"fields","order":2,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"all-ror-fields-and-sub-fields","category":"65ec6c03aff86d0072a566d7","createdAt":"2023-04-20T20:39:58.302Z","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"63ea71505bccd0025b40056a","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"title":"Relationships and hierarchies","icon":"","type":"basic","slug":"relationships","order":4,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"ror-hierarchies-and-relationships","category":"65ec6c03aff86d0072a566d7","createdAt":"2023-02-13T17:20:16.915Z","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"6441b9979730ea1a3d0b0afb","api":{"method":"get","url":"","auth":"required","params":[]},"title":"Schema versions","icon":"","type":"basic","slug":"schema-versions","order":5,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"api-versioning-copy","parentDoc":null,"category":"65ec6c03aff86d0072a566d7","createdAt":"2023-04-20T22:15:51.461Z","isBodyEmpty":false,"children":[]},{"_id":"6464d64fef9bab0066e99315","api":{"method":"get","url":"","auth":"required","params":[],"examples":{"codes":[]},"results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]}},"title":"Schema 2.0","icon":"","type":"basic","slug":"schema-v2","order":6,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"schema-v20","parentDoc":null,"category":"65ec6c03aff86d0072a566d7","createdAt":"2023-05-17T13:27:43.797Z","isBodyEmpty":false,"children":[]}]},{"_id":"653c1e6f1cd9f1004b55cc72","title":"ROR REST API","slug":"rest-api","order":5,"reference":false,"project":"6058e47681775f002de04832","version":"6058e47681775f002de04837","createdAt":"2023-10-27T20:32:47.999Z","__v":0,"pages":[{"_id":"63fc803674ca3e0045af2ddb","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"About the ROR REST API","icon":"","type":"basic","slug":"rest-api","order":0,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"api-about","category":"653c1e6f1cd9f1004b55cc72","createdAt":"2023-02-27T10:04:38.511Z","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"6465068f99bbc20028cc7084","api":{"method":"get","url":"","auth":"required","params":[]},"title":"Retrieve a single record","icon":"","type":"basic","slug":"api-single","order":1,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"retrieve-a-single-ror-record","parentDoc":null,"category":"653c1e6f1cd9f1004b55cc72","createdAt":"2023-05-17T16:53:35.628Z","isBodyEmpty":false,"children":[]},{"_id":"6465071071aace1d6f61fd7e","api":{"method":"get","url":"","auth":"required","params":[]},"title":"Retrieve a list of records","icon":"","type":"basic","slug":"api-list","order":2,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"retrieve-a-list-of-ror-records","parentDoc":null,"category":"653c1e6f1cd9f1004b55cc72","createdAt":"2023-05-17T16:55:44.021Z","isBodyEmpty":false,"children":[]},{"_id":"646564ed6206730045608ea7","api":{"method":"get","url":"","auth":"required","params":[]},"title":"Filtering","icon":"","type":"basic","slug":"api-filtering","order":3,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"filtering","parentDoc":null,"category":"653c1e6f1cd9f1004b55cc72","createdAt":"2023-05-17T23:36:13.204Z","isBodyEmpty":false,"children":[]},{"_id":"646564bf25682100246d7641","api":{"method":"get","url":"","auth":"required","params":[]},"title":"Paging","icon":"","type":"basic","slug":"api-paging","order":4,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"paging","parentDoc":null,"category":"653c1e6f1cd9f1004b55cc72","createdAt":"2023-05-17T23:35:27.796Z","isBodyEmpty":false,"children":[]},{"_id":"63d1a47566e590002a7fc9d2","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"Query parameter","icon":"","type":"basic","slug":"api-query","order":5,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"query-parameter","category":"653c1e6f1cd9f1004b55cc72","createdAt":"2023-01-25T21:51:49.092Z","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"641211ffd09495007a04c5b0","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"title":"Advanced query parameter","icon":"","type":"basic","slug":"api-advanced-query","order":6,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"advanced-query-parameter","parentDoc":null,"category":"653c1e6f1cd9f1004b55cc72","createdAt":"2023-03-15T18:44:15.278Z","isBodyEmpty":false,"children":[]},{"_id":"63d1a4b9149169004c68b881","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"title":"Affiliation parameter","icon":"","type":"basic","slug":"api-affiliation","order":7,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"affiliation-parameter","parentDoc":null,"category":"653c1e6f1cd9f1004b55cc72","createdAt":"2023-01-25T21:52:57.629Z","isBodyEmpty":false,"children":[]},{"_id":"6441a7b0de10cd149041710c","api":{"method":"get","url":"","auth":"required","params":[]},"title":"API versions","icon":"","type":"basic","slug":"api-versions","order":8,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"schema-and-api-versioning-1","category":"653c1e6f1cd9f1004b55cc72","createdAt":"2023-04-20T20:59:28.209Z","parentDoc":null,"isBodyEmpty":false,"children":[]}]},{"_id":"60d25b780dfce1003f4547aa","title":"Tools & Services","slug":"tools-services","order":6,"reference":false,"isAPI":false,"project":"6058e47681775f002de04832","version":"6058e47681775f002de04837","createdAt":"2021-06-22T21:51:52.183Z","__v":0,"pages":[{"_id":"60d3d01ac6b0030070645391","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"Data dump","type":"basic","slug":"data-dump","order":0,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"","createdAt":"2021-06-24T00:21:46.090Z","category":"60d25b780dfce1003f4547aa","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]},{"_id":"60fee88bae1bb3000f317da2","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"title":"Web search","type":"basic","slug":"web-search","order":1,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"web-search-interface","createdAt":"2021-07-26T16:53:31.701Z","category":"60d25b780dfce1003f4547aa","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]},{"_id":"60d3d0249841a7004a372925","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"title":"OpenRefine reconciler","type":"basic","slug":"openrefine-reconciler","order":2,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"","createdAt":"2021-06-24T00:21:56.714Z","category":"60d25b780dfce1003f4547aa","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]}]},{"_id":"64426d364b8f4c00604bb504","title":"Collecting ROR IDs","slug":"mapping-and-matching","order":7,"reference":false,"project":"6058e47681775f002de04832","version":"6058e47681775f002de04837","createdAt":"2023-04-21T11:02:14.913Z","__v":0,"pages":[{"_id":"6388f77b6c803f0024576f3d","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"Create ROR-powered forms","icon":"","type":"basic","slug":"forms","order":0,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"create-ror-powered-typeaheads","createdAt":"2022-12-01T18:50:35.957Z","category":"64426d364b8f4c00604bb504","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"60d3e4c27dccd0004443bc84","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"title":"Match organization names to ROR IDs","type":"basic","slug":"matching","order":1,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"match-organization-names-to-ror-ids","createdAt":"2021-06-24T01:49:54.894Z","category":"64426d364b8f4c00604bb504","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]},{"_id":"60d3e492c16abe006427745b","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"Map other organization IDs to ROR IDs","type":"basic","slug":"mapping","order":2,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"map-other-organization-id-types-to-ror","createdAt":"2021-06-24T01:49:06.244Z","category":"64426d364b8f4c00604bb504","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]},{"_id":"60f0d77625052e007e5fdeea","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"title":"Transition from GRID to ROR","type":"basic","slug":"grid","order":3,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"gridror-transition-faq","createdAt":"2021-07-16T00:48:54.225Z","category":"64426d364b8f4c00604bb504","parentDoc":null,"deprecated":false,"icon":"","isBodyEmpty":false,"children":[]},{"_id":"65e8e50442039e001d1bf878","api":{"method":"get","url":"","auth":"required","params":[]},"title":"Transition from Open Funder Registry to ROR","icon":"","type":"basic","slug":"funder-registry","order":4,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"open-funder-registry-ror-transition-faq","category":"64426d364b8f4c00604bb504","createdAt":"2024-03-06T21:49:56.732Z","parentDoc":null,"isBodyEmpty":false,"children":[]}]},{"_id":"60d25b63bd8660001006bcba","title":"Sending ROR IDs","slug":"implementation-how-to-guides","order":8,"reference":false,"isAPI":false,"project":"6058e47681775f002de04832","version":"6058e47681775f002de04837","createdAt":"2021-06-22T21:51:31.872Z","__v":0,"pages":[{"_id":"6441b9fc874e64005e3748cb","api":{"method":"get","url":"","auth":"required","params":[],"examples":{"codes":[]},"results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]}},"title":"Add ROR IDs to Crossref DOIs","icon":"","type":"basic","slug":"crossref","order":0,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"include-ror-ids-in-crossref-dois","category":"60d25b63bd8660001006bcba","createdAt":"2023-04-20T22:17:32.825Z","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"6441ba1deda7550012b9c1df","api":{"method":"get","url":"","auth":"required","params":[]},"title":"Add ROR IDs to DataCite DOIs","icon":"","type":"basic","slug":"datacite","order":1,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"include-ror-ids-in-datacite-dois","category":"60d25b63bd8660001006bcba","createdAt":"2023-04-20T22:18:05.994Z","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"6320a168f8e794131108ae63","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[]},"title":"Add ROR IDs to JATS XML","icon":"","type":"basic","slug":"jats","order":2,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"include-ror-ids-in-jats-xml","createdAt":"2022-09-13T15:27:36.976Z","category":"60d25b63bd8660001006bcba","parentDoc":null,"isBodyEmpty":false,"children":[]},{"_id":"6182d13df84631005aa3c8e9","api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"title":"Add ROR IDs to ORCID records","type":"basic","slug":"orcid","order":3,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"previousSlug":"include-ror-ids-in-orcid-record-data","createdAt":"2021-11-03T18:13:17.918Z","category":"60d25b63bd8660001006bcba","parentDoc":null,"icon":"","isBodyEmpty":false,"children":[]}]}],"refs":[]},"baseUrl":"/","apiBaseUrl":"/","search":{"appId":"T28YKFATPY","searchApiKey":"ODczNzdiMDdiZDc1ZWRiOGQyYWVlYzVjMTdiMjg3ZmEwNWUyZDk3YWJlMDc5ZTliNmFhNTE2ZWY3ZDhiOGUyZnRhZ0ZpbHRlcnM9KHByb2plY3Q6NjA1OGU0NzY4MTc3NWYwMDJkZTA0ODMyKSwodmVyc2lvbjpub25lLHZlcnNpb246NjA1OGU0NzY4MTc3NWYwMDJkZTA0ODM3KSwoaGlkZGVuOm5vbmUsaGlkZGVuOmZhbHNlKSwoaW5kZXg6Q3VzdG9tUGFnZSxpbmRleDpQYWdlLGluZGV4OkJsb2cp","indexName":"readme_search_v2","projectsMeta":[{"modules":{"landing":true,"docs":true,"examples":false,"reference":false,"changelog":true,"discuss":false,"suggested_edits":true,"logs":false,"custompages":false,"tutorials":false,"graphql":false},"id":"6058e47681775f002de04832","name":"ROR","subdomain":"ror","subpath":"","nav_names":{"docs":"","reference":"","changelog":"","discuss":"","tutorials":"","recipes":""}}],"UrlManager":{"options":{"child":false,"parent":null,"hasOneChild":false,"project":null,"version":null,"lang":"en"},"defaults":{"lang":"en"}},"urlManagerOpts":{"lang":"en","parent":{"childrenProjects":[]},"project":{"subdomain":"ror"},"version":"1"}},"activeDoc":"forms","rdmd":{"baseUrl":"/","body":"> 🚧 Using ROR with standard form solutions\n> \n> The information on this page is aimed at developers who are building and maintaining web applications that include custom forms. If you are using a standard form solution such as Google Forms, we recommend collecting organization names as text in your form, generating a CSV file from the form responses, and then [matching the organization names to ROR IDs](doc:matching).\n\nIf your system includes fields that users enter affiliation information into, you can standardize that input and capture corresponding ROR IDs by adding a typeahead (or \"autosuggest\") widget that prompts users to select an organization from ROR. Learn more about best practices and implementation steps for using ROR in your application's forms here. \n\n![ROR typeahead demo showing a user entering variations on the name Cracow University of Economics into a form](https://files.readme.io/4f93231-cracow-ror-typeahead-new.gif)\n\n# General best practices\n\n## Capture affiliation with ROR\n\nUse a ROR-powered typeahead to capture creator affiliations (e.g., University of Wisconsin-Madison). Department, college, and other sub-units should be captured in a separate field, as in the examples below.\n\n## Allow users to search for variant names\n\nThe fields `name`, `acronyms`, `aliases`, and `labels` all include variations on an organization's name, any of which a user might and should be able to search for. The `?query` parameter of the ROR API will search an index of all these fields, but if you build your own search logic, make sure you configure your typeahead to allow searching for the values in any and all name-related fields. \n\nIn the below example, the ROR record for the University of Wisconsin-Madison, <https://ror.org/01y2jtd41>, has the single value \"University of Wisconsin-Madison\" in the `name` field, the value \"UW-Madison\" in the `aliases` field, the value `UW` in the `acronyms` field, and the organization's name in French and Spanish in the `labels` field. All values are searchable. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8f07cc7-ror-typeahead-UW-Madison.png\",\n null,\n \"\"\n ],\n \"align\": \"center\"\n }\n ]\n}\n[/block]\n\n\n## Show information beyond the primary organization name\n\nIn addition to the primary organization name, display other ROR record fields in order to help users select the correct organization. We recommend including:\n\n- Name variations such as `acronyms`, `aliases`, and names in other languages (stored in the `labels` field). This is particularly important because a user's query should be able to match a name variation rather than the primary name in a ROR record.\n\n- Geographic information such as city and country.\n\n- Organization type.\n\nWe do not recommend displaying ROR IDs to end users.\n\n> 📘 Special considerations for displaying geographical information from ROR\n> \n> ### U.S. states\n> \n> Beginning with [Schema 2.0](doc:schema-v2), ROR metadata does not include U.S. states. ROR is a global registry, and most countries do not have an administrative region corresponding to the U.S. state. Note that our analysis shows that **there appear to be no records with duplicate name, city, and country** in the ROR registry, so users should be able to choose the correct organization based on name, city, and country alone, e.g., \"York University, Toronto, Canada\" (<https://ror.org/05fq50484>), \"York University, York, United States\" (<https://ror.org/022jz8688>) and \"York College, York, United Kingdom\" (<https://ror.org/04gaeyc40>). Developers who do wish to display state-level values can retrieve them from GeoNames using the GeoNames ID in the ROR record. \n> \n> ### Multiple locations\n> \n> Beginning with [Schema 2.0](doc:schema-v2), ROR metadata supports multiple locations in a single ROR record. The large majority of ROR records include only a single location; [ROR metadata policies](https://github.com/ror-community/ror-updates/wiki/ROR-Metadata-Policies#multiple-locations) outline the rare circumstances in which a ROR record will qualify for multiple locations. Developers who wish to pull location information from ROR should plan to accommodate multiple locations, for example by displaying all locations in a drop down or typeahead. In cases where records have multiple locations, no priority is specified and order is not significant. For this reason, displaying only the first location may not be appropriate for all cases. Additionally, in some cases, developers may wish to allow users to edit location fields within their application(s) to reflect the actual location of the user rather than forcing the use of a location from a ROR record.\n\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e3533da-ror-typeahead-University-of-Wisc-Madison.png\",\n null,\n \"\"\n ],\n \"align\": \"center\"\n }\n ]\n}\n[/block]\n\n\n## Do not require the ROR ID\n\nWe strongly discourage requiring users to enter only organizations with ROR IDs, because there are many valid reasons why a user may be unable to select an organization with a ROR ID as their affiliation: \n\n- The user may be affiliated with a research organization that is in scope for ROR but has not yet been added to the registry\n- The user may be affiliated with a research organization that is not in scope for ROR, such as a single-person consultancy\n- The user may be an independent researcher\n\nForms can still require users to give an institutional affiliation by allowing users to enter free text strings if no appropriate suggestion is made by the ROR typeahead.\n\n## Do not allow editing of the ROR organization name\n\nAfter a user chooses an organization from the list, don't allow them to edit the name, as this will likely result in incorrectly matched ROR IDs. Instead, prompt them to choose a new organization from the ROR list or else enter an organization name as a free text string.\n\n![](https://lh4.googleusercontent.com/s2orC1Hyx-blwbnAwAT2zvBEaU8jLZlvHXd_MBGoO41BRCvo8GZZtlFG_rkXet4mJwbA_sGT_LjOX0EsYhyJulpli2LTy9Kc_-U9rNap04olBUXQ5qb902aMnJrFw7wPLSkYd8UP5G2tYY47chwCqVZ7T7MBZ6toR_0ns_SYXOKjLC9sW2U7VgrQie2b)\n\n## Allow entering a text string if no ROR match is found\n\nAllow the user to enter the organization name as a text string if no appropriate option is suggested by the typeahead.\n\n![](https://lh6.googleusercontent.com/lZl0oiKuYUAytx8H-Rv9Oa93tcVCOtqhR6vrQlEnz5D3RxAy4hwV0Luja73MaHa4q6AqLFea4FHJzYfdDDCiXtH1QQdTcXcKy-_2-US5rEr3rSrUqxJIa8mgG0jya0k5_hQqJgbwrdqujOrpoly7Fb1Gn1h3Xsy54ohcyueV-OBZfU023GC0TI2bBrMS)\n\n## Allow users to provide multiple affiliations\n\nAllow users to provide multiple affiliations, since many users are affiliated with multiple organizations. In addition, many users are affiliated with **both** a high-level organization such as the [University of Wisconsin-Madison](https://ror.org/01y2jtd41) **and** a \"child\" research organization such as the [Morgridge Institute for Research](https://ror.org/05cb4rb43). Making the ROR-powered institutional affiliation field repeatable enables users to provide both affiliations. \n\nSee [ROR hierarchies and relationships](doc:relationships) for more information about parent, child, and sibling research organizations in ROR.\n\n![](https://files.readme.io/7b7847d-typeahead-morgridge.png)\n\n## Follow accessibility best practices\n\nFollow accessibility best practices for form controls, such [W3C Web accessibility initiative (WAI)](https://www.w3.org/WAI/), including:\n\n- Label and group form controls correctly\n\n- Include form instructions in a way that can be read by assistive technologies, such as screen readers\n\n- Ensure that keyboard/tab navigation is possible\n\n- Ensure that form controls function at a variety of screen sizes/zoom levels\n\n- Ensure that colors with sufficient contrast are used, and that color alone is not used to convey information\n\n## Consider filtering the list of suggestions displayed to the user\n\nConsider [Filtering](doc:api-filtering) the list of suggestions displayed to the user based on context, such as the user's email domain, organization type, or location (either browser geolocation or location information entered in other fields on the same form).\n\n![](https://lh3.googleusercontent.com/nr_HsqKJoVWObgIx27yqGTZNx84kWzSFUxQUwEercYX-01H1FzdYN2c0w5_hlTUbzoZd3nMsQVDexwhbdpQTH1-MWFotYjIhNyQ6d0IvLmP4JPbo6Zc2qBqAu54vaTiCjjRPSeMhCfTIyyPsybmSUGMpVKLBDaGAi8eX9C1Hav--EoI_A9E6itkT3rVh)\n\n## Consider populating other fields using ROR data\n\nConsider populating other fields in your form automatically using data from the ROR record selected by the user. See the list of ROR record fields in [ROR data structure](doc:data-structure).\n\n![](https://lh6.googleusercontent.com/aTclvWe9JZnZaMLH7W6e6tT91l1YC_TrpfOoDVgW1dRHY7vqxY2AOxORlSU3T2Ixfjz6vREyMjhooVAaVVQGv7ua20EqM9VaI-arubiYV6lEOjIKvcx59TB2zeMHydV7kNf9XeKAOPP5XVkKRbynRwl9ROTVtHtT8-86HUhpsJNP-95ZWVRqXTWkHzEZ)\n\n# Implementation approaches\n\n## ROR API\n\nA simple way to populate a typeahead widget is to query the ROR [REST API](doc:rest-api) in real time as the user types. While this approach has the advantage of being easy to implement, it comes with some disadvantages:\n\n- Slower/more variable response time vs querying data stored locally\n\n- Depends on being able to reach the ROR API\n\n- Performance may be impacted by other ROR API users\n\nSteps to implement a typeahead widget using the ROR [REST API](doc:rest-api) will vary depending on your system architecture, but may include the following:\n\n1. Send user input to the ROR API.\n\nAs the user types their affiliation, send the input to the ROR API. We recommend using the [query parameter](doc:api-query) search. You may also wish to first [check the heartbeat of the ROR API](doc:api-about#heartbeat). \n\n2. Parse results.\n\nResults are returned as a list of ROR records, ordered by matching score. Note that the matching score itself is not returned. Results are paginated, and the first 20 results are returned by default. See example responses in the [Query parameter](doc:api-query) section of the REST API guide. \n\n3. Display results.\n\nDisplay the top results to the user. In addition to the name, include information from ROR like acronyms, aliases, names in other languages, city, country, URL and organization type to help the user choose the correct result. We do not recommend displaying ROR IDs to users.\n\n4. Store selected result.\n\nStore the ROR ID for the selected result in your system along with any other required information. We recommend storing and displaying ROR IDs as full URLs in the form <https://ror.org/01y2jtd41>. Read more about the [ROR identifier pattern](doc:identifier).\n\n## ROR data dump\n\nRegardless of the source data, typeahead widgets perform faster when querying data stored locally vs making requests to external resources.\n\nWhile performance is much better and both data and search results can be tuned to meet the needs of a particular system, this approach requires more initial development time, as well as ongoing maintenance.\n\nSteps to implement a widget using the ROR [data dump](doc:data-dump) vary depending on your system architecture, but may include the following:\n\n1. Download and parse the ROR data dump into a local database.\n\n2. Create a search index.\n\n3. Create an internal API endpoint with logic to query the search index.\n\n4. Use your internal API endpoint to populate your typeahead widget, following the best practices above.\n\n5. Update your database and search index when new ROR data dumps are released.\n\n# Typeahead demos and code\n\n- Try our demonstration version of a ROR typeahead at <https://ror-community.github.io/ror-typeahead-demos/>\n- Take a look at the code for our ROR typeahead demos at <https://github.com/ror-community/ror-typeahead-demos>","opts":{"alwaysThrow":false,"compatibilityMode":false,"copyButtons":true,"correctnewlines":false,"markdownOptions":{"fences":true,"commonmark":true,"gfm":true,"ruleSpaces":false,"listItemIndent":"1","spacedTable":true,"paddedTable":true},"normalize":true,"lazyImages":true,"reusableContent":{"tags":{},"wrap":false},"safeMode":false,"settings":{"position":true},"theme":"light","resourceID":"6388f77b6c803f0024576f3d","resourceType":"page","baseUrl":"/","terms":[{"_id":"6058e47681775f002de04833","term":"parliament","definition":"Owls are generally solitary, but when seen together the group is called a 'parliament'!"}],"variables":{"user":{},"defaults":[]}},"terms":[{"_id":"6058e47681775f002de04833","term":"parliament","definition":"Owls are generally solitary, but when seen together the group is called a 'parliament'!"}],"variables":{"user":{},"defaults":[]},"mdx":false,"dehydrated":{"toc":"<nav><ul class=\"toc-list\"><li><a class=\"tocHeader\" href=\"#\"><i class=\"icon icon-text-align-left\"></i>Table of Contents</a></li><li class=\"toc-children\"><ul>\n<li>\n<a href=\"#general-best-practices\">General best practices</a>\n<ul>\n<li><a href=\"#capture-affiliation-with-ror\">Capture affiliation with ROR</a></li>\n<li><a href=\"#allow-users-to-search-for-variant-names\">Allow users to search for variant names</a></li>\n<li><a href=\"#show-information-beyond-the-primary-organization-name\">Show information beyond the primary organization name</a></li>\n<li><a href=\"#do-not-require-the-ror-id\">Do not require the ROR ID</a></li>\n<li><a href=\"#do-not-allow-editing-of-the-ror-organization-name\">Do not allow editing of the ROR organization name</a></li>\n<li><a href=\"#allow-entering-a-text-string-if-no-ror-match-is-found\">Allow entering a text string if no ROR match is found</a></li>\n<li><a href=\"#allow-users-to-provide-multiple-affiliations\">Allow users to provide multiple affiliations</a></li>\n<li><a href=\"#follow-accessibility-best-practices\">Follow accessibility best practices</a></li>\n<li><a href=\"#consider-filtering-the-list-of-suggestions-displayed-to-the-user\">Consider filtering the list of suggestions displayed to the user</a></li>\n<li><a href=\"#consider-populating-other-fields-using-ror-data\">Consider populating other fields using ROR data</a></li>\n</ul>\n</li>\n<li>\n<a href=\"#implementation-approaches\">Implementation approaches</a>\n<ul>\n<li><a href=\"#ror-api\">ROR API</a></li>\n<li><a href=\"#ror-data-dump\">ROR data dump</a></li>\n</ul>\n</li>\n<li>\n<a href=\"#typeahead-demos-and-code\">Typeahead demos and code</a>\n</li>\n</ul></li></ul></nav>","body":"<blockquote class=\"callout callout_warn\" theme=\"🚧\"><h2 class=\"callout-heading\"><span class=\"callout-icon\">🚧</span><p>Using ROR with standard form solutions</p></h2><p>The information on this page is aimed at developers who are building and maintaining web applications that include custom forms. If you are using a standard form solution such as Google Forms, we recommend collecting organization names as text in your form, generating a CSV file from the form responses, and then <a href=\"/docs/matching\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"matching\">matching the organization names to ROR IDs</a>.</p></blockquote>\n<p>If your system includes fields that users enter affiliation information into, you can standardize that input and capture corresponding ROR IDs by adding a typeahead (or &quot;autosuggest&quot;) widget that prompts users to select an organization from ROR. Learn more about best practices and implementation steps for using ROR in your application&#x27;s forms here. </p>\n<p><span aria-label=\"ROR typeahead demo showing a user entering variations on the name Cracow University of Economics into a form\" class=\"img lightbox closed\" role=\"button\" tabindex=\"0\"><span class=\"lightbox-inner\"><img alt=\"ROR typeahead demo showing a user entering variations on the name Cracow University of Economics into a form\" loading=\"lazy\" src=\"https://files.readme.io/4f93231-cracow-ror-typeahead-new.gif\" align=\"\" caption=\"\" height=\"auto\" title=\"\" width=\"auto\"/></span></span></p>\n<h1 class=\"heading heading-1 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"general-best-practices\"></div><div class=\"heading-text\"><div id=\"section-general-best-practices\" class=\"heading-anchor_backwardsCompatibility\"></div>General best practices</div><a aria-label=\"Skip link to General best practices\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#general-best-practices\"></a></h1>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"capture-affiliation-with-ror\"></div><div class=\"heading-text\"><div id=\"section-capture-affiliation-with-ror\" class=\"heading-anchor_backwardsCompatibility\"></div>Capture affiliation with ROR</div><a aria-label=\"Skip link to Capture affiliation with ROR\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#capture-affiliation-with-ror\"></a></h2>\n<p>Use a ROR-powered typeahead to capture creator affiliations (e.g., University of Wisconsin-Madison). Department, college, and other sub-units should be captured in a separate field, as in the examples below.</p>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"allow-users-to-search-for-variant-names\"></div><div class=\"heading-text\"><div id=\"section-allow-users-to-search-for-variant-names\" class=\"heading-anchor_backwardsCompatibility\"></div>Allow users to search for variant names</div><a aria-label=\"Skip link to Allow users to search for variant names\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#allow-users-to-search-for-variant-names\"></a></h2>\n<p>The fields <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">name</code>, <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">acronyms</code>, <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">aliases</code>, and <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">labels</code> all include variations on an organization&#x27;s name, any of which a user might and should be able to search for. The <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">?query</code> parameter of the ROR API will search an index of all these fields, but if you build your own search logic, make sure you configure your typeahead to allow searching for the values in any and all name-related fields. </p>\n<p>In the below example, the ROR record for the University of Wisconsin-Madison, <a href=\"https://ror.org/01y2jtd41\" target=\"\" title=\"\">https://ror.org/01y2jtd41</a>, has the single value &quot;University of Wisconsin-Madison&quot; in the <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">name</code> field, the value &quot;UW-Madison&quot; in the <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">aliases</code> field, the value <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">UW</code> in the <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">acronyms</code> field, and the organization&#x27;s name in French and Spanish in the <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">labels</code> field. All values are searchable. </p>\n<span aria-label=\"\" class=\"img lightbox closed\" role=\"button\" tabindex=\"0\"><span class=\"lightbox-inner\"><img alt=\"\" loading=\"lazy\" src=\"https://files.readme.io/8f07cc7-ror-typeahead-UW-Madison.png\" align=\"center\" class=\"\" caption=\"\" height=\"auto\" title=\"\" width=\"auto\"/></span></span>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"show-information-beyond-the-primary-organization-name\"></div><div class=\"heading-text\"><div id=\"section-show-information-beyond-the-primary-organization-name\" class=\"heading-anchor_backwardsCompatibility\"></div>Show information beyond the primary organization name</div><a aria-label=\"Skip link to Show information beyond the primary organization name\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#show-information-beyond-the-primary-organization-name\"></a></h2>\n<p>In addition to the primary organization name, display other ROR record fields in order to help users select the correct organization. We recommend including:</p>\n<ul>\n<li>\n<p>Name variations such as <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">acronyms</code>, <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">aliases</code>, and names in other languages (stored in the <button aria-label=\"Copy Code\" class=\"rdmd-code-copy fa\"></button><code class=\"rdmd-code lang- theme-light\" data-lang=\"\" name=\"\" tabindex=\"0\">labels</code> field). This is particularly important because a user&#x27;s query should be able to match a name variation rather than the primary name in a ROR record.</p>\n</li>\n<li>\n<p>Geographic information such as city and country.</p>\n</li>\n<li>\n<p>Organization type.</p>\n</li>\n</ul>\n<p>We do not recommend displaying ROR IDs to end users.</p>\n<blockquote class=\"callout callout_info\" theme=\"📘\"><h2 class=\"callout-heading\"><span class=\"callout-icon\">📘</span><p>Special considerations for displaying geographical information from ROR</p></h2><h3 class=\"heading heading-3 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"us-states\"></div><div class=\"heading-text\"><div id=\"section-u-s-states\" class=\"heading-anchor_backwardsCompatibility\"></div>U.S. states</div><a aria-label=\"Skip link to U.S. states\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#us-states\"></a></h3><p>Beginning with <a href=\"/docs/schema-v2\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"schema-v2\">Schema 2.0</a>, ROR metadata does not include U.S. states. ROR is a global registry, and most countries do not have an administrative region corresponding to the U.S. state. Note that our analysis shows that <strong>there appear to be no records with duplicate name, city, and country</strong> in the ROR registry, so users should be able to choose the correct organization based on name, city, and country alone, e.g., &quot;York University, Toronto, Canada&quot; (<a href=\"https://ror.org/05fq50484\" target=\"\" title=\"\">https://ror.org/05fq50484</a>), &quot;York University, York, United States&quot; (<a href=\"https://ror.org/022jz8688\" target=\"\" title=\"\">https://ror.org/022jz8688</a>) and &quot;York College, York, United Kingdom&quot; (<a href=\"https://ror.org/04gaeyc40\" target=\"\" title=\"\">https://ror.org/04gaeyc40</a>). Developers who do wish to display state-level values can retrieve them from GeoNames using the GeoNames ID in the ROR record. </p><h3 class=\"heading heading-3 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"multiple-locations\"></div><div class=\"heading-text\"><div id=\"section-multiple-locations\" class=\"heading-anchor_backwardsCompatibility\"></div>Multiple locations</div><a aria-label=\"Skip link to Multiple locations\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#multiple-locations\"></a></h3><p>Beginning with <a href=\"/docs/schema-v2\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"schema-v2\">Schema 2.0</a>, ROR metadata supports multiple locations in a single ROR record. The large majority of ROR records include only a single location; <a href=\"https://github.com/ror-community/ror-updates/wiki/ROR-Metadata-Policies#multiple-locations\" target=\"\" title=\"\">ROR metadata policies</a> outline the rare circumstances in which a ROR record will qualify for multiple locations. Developers who wish to pull location information from ROR should plan to accommodate multiple locations, for example by displaying all locations in a drop down or typeahead. In cases where records have multiple locations, no priority is specified and order is not significant. For this reason, displaying only the first location may not be appropriate for all cases. Additionally, in some cases, developers may wish to allow users to edit location fields within their application(s) to reflect the actual location of the user rather than forcing the use of a location from a ROR record.</p></blockquote>\n<span aria-label=\"\" class=\"img lightbox closed\" role=\"button\" tabindex=\"0\"><span class=\"lightbox-inner\"><img alt=\"\" loading=\"lazy\" src=\"https://files.readme.io/e3533da-ror-typeahead-University-of-Wisc-Madison.png\" align=\"center\" class=\"\" caption=\"\" height=\"auto\" title=\"\" width=\"auto\"/></span></span>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"do-not-require-the-ror-id\"></div><div class=\"heading-text\"><div id=\"section-do-not-require-the-ror-id\" class=\"heading-anchor_backwardsCompatibility\"></div>Do not require the ROR ID</div><a aria-label=\"Skip link to Do not require the ROR ID\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#do-not-require-the-ror-id\"></a></h2>\n<p>We strongly discourage requiring users to enter only organizations with ROR IDs, because there are many valid reasons why a user may be unable to select an organization with a ROR ID as their affiliation: </p>\n<ul>\n<li>The user may be affiliated with a research organization that is in scope for ROR but has not yet been added to the registry</li>\n<li>The user may be affiliated with a research organization that is not in scope for ROR, such as a single-person consultancy</li>\n<li>The user may be an independent researcher</li>\n</ul>\n<p>Forms can still require users to give an institutional affiliation by allowing users to enter free text strings if no appropriate suggestion is made by the ROR typeahead.</p>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"do-not-allow-editing-of-the-ror-organization-name\"></div><div class=\"heading-text\"><div id=\"section-do-not-allow-editing-of-the-ror-organization-name\" class=\"heading-anchor_backwardsCompatibility\"></div>Do not allow editing of the ROR organization name</div><a aria-label=\"Skip link to Do not allow editing of the ROR organization name\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#do-not-allow-editing-of-the-ror-organization-name\"></a></h2>\n<p>After a user chooses an organization from the list, don&#x27;t allow them to edit the name, as this will likely result in incorrectly matched ROR IDs. Instead, prompt them to choose a new organization from the ROR list or else enter an organization name as a free text string.</p>\n<p><span aria-label=\"\" class=\"img lightbox closed\" role=\"button\" tabindex=\"0\"><span class=\"lightbox-inner\"><img alt=\"\" loading=\"lazy\" src=\"https://lh4.googleusercontent.com/s2orC1Hyx-blwbnAwAT2zvBEaU8jLZlvHXd_MBGoO41BRCvo8GZZtlFG_rkXet4mJwbA_sGT_LjOX0EsYhyJulpli2LTy9Kc_-U9rNap04olBUXQ5qb902aMnJrFw7wPLSkYd8UP5G2tYY47chwCqVZ7T7MBZ6toR_0ns_SYXOKjLC9sW2U7VgrQie2b\" align=\"\" caption=\"\" height=\"auto\" title=\"\" width=\"auto\"/></span></span></p>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"allow-entering-a-text-string-if-no-ror-match-is-found\"></div><div class=\"heading-text\"><div id=\"section-allow-entering-a-text-string-if-no-ror-match-is-found\" class=\"heading-anchor_backwardsCompatibility\"></div>Allow entering a text string if no ROR match is found</div><a aria-label=\"Skip link to Allow entering a text string if no ROR match is found\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#allow-entering-a-text-string-if-no-ror-match-is-found\"></a></h2>\n<p>Allow the user to enter the organization name as a text string if no appropriate option is suggested by the typeahead.</p>\n<p><span aria-label=\"\" class=\"img lightbox closed\" role=\"button\" tabindex=\"0\"><span class=\"lightbox-inner\"><img alt=\"\" loading=\"lazy\" src=\"https://lh6.googleusercontent.com/lZl0oiKuYUAytx8H-Rv9Oa93tcVCOtqhR6vrQlEnz5D3RxAy4hwV0Luja73MaHa4q6AqLFea4FHJzYfdDDCiXtH1QQdTcXcKy-_2-US5rEr3rSrUqxJIa8mgG0jya0k5_hQqJgbwrdqujOrpoly7Fb1Gn1h3Xsy54ohcyueV-OBZfU023GC0TI2bBrMS\" align=\"\" caption=\"\" height=\"auto\" title=\"\" width=\"auto\"/></span></span></p>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"allow-users-to-provide-multiple-affiliations\"></div><div class=\"heading-text\"><div id=\"section-allow-users-to-provide-multiple-affiliations\" class=\"heading-anchor_backwardsCompatibility\"></div>Allow users to provide multiple affiliations</div><a aria-label=\"Skip link to Allow users to provide multiple affiliations\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#allow-users-to-provide-multiple-affiliations\"></a></h2>\n<p>Allow users to provide multiple affiliations, since many users are affiliated with multiple organizations. In addition, many users are affiliated with <strong>both</strong> a high-level organization such as the <a href=\"https://ror.org/01y2jtd41\" target=\"\" title=\"\">University of Wisconsin-Madison</a> <strong>and</strong> a &quot;child&quot; research organization such as the <a href=\"https://ror.org/05cb4rb43\" target=\"\" title=\"\">Morgridge Institute for Research</a>. Making the ROR-powered institutional affiliation field repeatable enables users to provide both affiliations. </p>\n<p>See <a href=\"/docs/relationships\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"relationships\">ROR hierarchies and relationships</a> for more information about parent, child, and sibling research organizations in ROR.</p>\n<p><span aria-label=\"\" class=\"img lightbox closed\" role=\"button\" tabindex=\"0\"><span class=\"lightbox-inner\"><img alt=\"\" loading=\"lazy\" src=\"https://files.readme.io/7b7847d-typeahead-morgridge.png\" align=\"\" caption=\"\" height=\"auto\" title=\"\" width=\"auto\"/></span></span></p>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"follow-accessibility-best-practices\"></div><div class=\"heading-text\"><div id=\"section-follow-accessibility-best-practices\" class=\"heading-anchor_backwardsCompatibility\"></div>Follow accessibility best practices</div><a aria-label=\"Skip link to Follow accessibility best practices\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#follow-accessibility-best-practices\"></a></h2>\n<p>Follow accessibility best practices for form controls, such <a href=\"https://www.w3.org/WAI/\" target=\"\" title=\"\">W3C Web accessibility initiative (WAI)</a>, including:</p>\n<ul>\n<li>\n<p>Label and group form controls correctly</p>\n</li>\n<li>\n<p>Include form instructions in a way that can be read by assistive technologies, such as screen readers</p>\n</li>\n<li>\n<p>Ensure that keyboard/tab navigation is possible</p>\n</li>\n<li>\n<p>Ensure that form controls function at a variety of screen sizes/zoom levels</p>\n</li>\n<li>\n<p>Ensure that colors with sufficient contrast are used, and that color alone is not used to convey information</p>\n</li>\n</ul>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"consider-filtering-the-list-of-suggestions-displayed-to-the-user\"></div><div class=\"heading-text\"><div id=\"section-consider-filtering-the-list-of-suggestions-displayed-to-the-user\" class=\"heading-anchor_backwardsCompatibility\"></div>Consider filtering the list of suggestions displayed to the user</div><a aria-label=\"Skip link to Consider filtering the list of suggestions displayed to the user\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#consider-filtering-the-list-of-suggestions-displayed-to-the-user\"></a></h2>\n<p>Consider <a href=\"/docs/api-filtering\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"api-filtering\">Filtering</a> the list of suggestions displayed to the user based on context, such as the user&#x27;s email domain, organization type, or location (either browser geolocation or location information entered in other fields on the same form).</p>\n<p><span aria-label=\"\" class=\"img lightbox closed\" role=\"button\" tabindex=\"0\"><span class=\"lightbox-inner\"><img alt=\"\" loading=\"lazy\" src=\"https://lh3.googleusercontent.com/nr_HsqKJoVWObgIx27yqGTZNx84kWzSFUxQUwEercYX-01H1FzdYN2c0w5_hlTUbzoZd3nMsQVDexwhbdpQTH1-MWFotYjIhNyQ6d0IvLmP4JPbo6Zc2qBqAu54vaTiCjjRPSeMhCfTIyyPsybmSUGMpVKLBDaGAi8eX9C1Hav--EoI_A9E6itkT3rVh\" align=\"\" caption=\"\" height=\"auto\" title=\"\" width=\"auto\"/></span></span></p>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"consider-populating-other-fields-using-ror-data\"></div><div class=\"heading-text\"><div id=\"section-consider-populating-other-fields-using-ror-data\" class=\"heading-anchor_backwardsCompatibility\"></div>Consider populating other fields using ROR data</div><a aria-label=\"Skip link to Consider populating other fields using ROR data\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#consider-populating-other-fields-using-ror-data\"></a></h2>\n<p>Consider populating other fields in your form automatically using data from the ROR record selected by the user. See the list of ROR record fields in <a href=\"/docs/data-structure\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"data-structure\">ROR data structure</a>.</p>\n<p><span aria-label=\"\" class=\"img lightbox closed\" role=\"button\" tabindex=\"0\"><span class=\"lightbox-inner\"><img alt=\"\" loading=\"lazy\" src=\"https://lh6.googleusercontent.com/aTclvWe9JZnZaMLH7W6e6tT91l1YC_TrpfOoDVgW1dRHY7vqxY2AOxORlSU3T2Ixfjz6vREyMjhooVAaVVQGv7ua20EqM9VaI-arubiYV6lEOjIKvcx59TB2zeMHydV7kNf9XeKAOPP5XVkKRbynRwl9ROTVtHtT8-86HUhpsJNP-95ZWVRqXTWkHzEZ\" align=\"\" caption=\"\" height=\"auto\" title=\"\" width=\"auto\"/></span></span></p>\n<h1 class=\"heading heading-1 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"implementation-approaches\"></div><div class=\"heading-text\"><div id=\"section-implementation-approaches\" class=\"heading-anchor_backwardsCompatibility\"></div>Implementation approaches</div><a aria-label=\"Skip link to Implementation approaches\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#implementation-approaches\"></a></h1>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"ror-api\"></div><div class=\"heading-text\"><div id=\"section-ror-api\" class=\"heading-anchor_backwardsCompatibility\"></div>ROR API</div><a aria-label=\"Skip link to ROR API\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#ror-api\"></a></h2>\n<p>A simple way to populate a typeahead widget is to query the ROR <a href=\"/docs/rest-api\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"rest-api\">REST API</a> in real time as the user types. While this approach has the advantage of being easy to implement, it comes with some disadvantages:</p>\n<ul>\n<li>\n<p>Slower/more variable response time vs querying data stored locally</p>\n</li>\n<li>\n<p>Depends on being able to reach the ROR API</p>\n</li>\n<li>\n<p>Performance may be impacted by other ROR API users</p>\n</li>\n</ul>\n<p>Steps to implement a typeahead widget using the ROR <a href=\"/docs/rest-api\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"rest-api\">REST API</a> will vary depending on your system architecture, but may include the following:</p>\n<ol>\n<li>Send user input to the ROR API.</li>\n</ol>\n<p>As the user types their affiliation, send the input to the ROR API. We recommend using the <a href=\"/docs/api-query\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"api-query\">query parameter</a> search. You may also wish to first <a href=\"/docs/api-about#heartbeat\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"api-about#heartbeat\">check the heartbeat of the ROR API</a>. </p>\n<ol start=\"2\">\n<li>Parse results.</li>\n</ol>\n<p>Results are returned as a list of ROR records, ordered by matching score. Note that the matching score itself is not returned. Results are paginated, and the first 20 results are returned by default. See example responses in the <a href=\"/docs/api-query\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"api-query\">Query parameter</a> section of the REST API guide. </p>\n<ol start=\"3\">\n<li>Display results.</li>\n</ol>\n<p>Display the top results to the user. In addition to the name, include information from ROR like acronyms, aliases, names in other languages, city, country, URL and organization type to help the user choose the correct result. We do not recommend displaying ROR IDs to users.</p>\n<ol start=\"4\">\n<li>Store selected result.</li>\n</ol>\n<p>Store the ROR ID for the selected result in your system along with any other required information. We recommend storing and displaying ROR IDs as full URLs in the form <a href=\"https://ror.org/01y2jtd41\" target=\"\" title=\"\">https://ror.org/01y2jtd41</a>. Read more about the <a href=\"/docs/identifier\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"identifier\">ROR identifier pattern</a>.</p>\n<h2 class=\"heading heading-2 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"ror-data-dump\"></div><div class=\"heading-text\"><div id=\"section-ror-data-dump\" class=\"heading-anchor_backwardsCompatibility\"></div>ROR data dump</div><a aria-label=\"Skip link to ROR data dump\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#ror-data-dump\"></a></h2>\n<p>Regardless of the source data, typeahead widgets perform faster when querying data stored locally vs making requests to external resources.</p>\n<p>While performance is much better and both data and search results can be tuned to meet the needs of a particular system, this approach requires more initial development time, as well as ongoing maintenance.</p>\n<p>Steps to implement a widget using the ROR <a href=\"/docs/data-dump\" target=\"\" title=\"\" class=\"doc-link\" data-sidebar=\"data-dump\">data dump</a> vary depending on your system architecture, but may include the following:</p>\n<ol>\n<li>\n<p>Download and parse the ROR data dump into a local database.</p>\n</li>\n<li>\n<p>Create a search index.</p>\n</li>\n<li>\n<p>Create an internal API endpoint with logic to query the search index.</p>\n</li>\n<li>\n<p>Use your internal API endpoint to populate your typeahead widget, following the best practices above.</p>\n</li>\n<li>\n<p>Update your database and search index when new ROR data dumps are released.</p>\n</li>\n</ol>\n<h1 class=\"heading heading-1 header-scroll\" align=\"\"><div class=\"heading-anchor anchor waypoint\" id=\"typeahead-demos-and-code\"></div><div class=\"heading-text\"><div id=\"section-typeahead-demos-and-code\" class=\"heading-anchor_backwardsCompatibility\"></div>Typeahead demos and code</div><a aria-label=\"Skip link to Typeahead demos and code\" class=\"heading-anchor-icon fa fa-anchor\" href=\"#typeahead-demos-and-code\"></a></h1>\n<ul>\n<li>Try our demonstration version of a ROR typeahead at <a href=\"https://ror-community.github.io/ror-typeahead-demos/\" target=\"\" title=\"\">https://ror-community.github.io/ror-typeahead-demos/</a></li>\n<li>Take a look at the code for our ROR typeahead demos at <a href=\"https://github.com/ror-community/ror-typeahead-demos\" target=\"\" title=\"\">https://github.com/ror-community/ror-typeahead-demos</a></li>\n</ul>"}},"doc":{"metadata":{"image":[],"title":"","description":"This document provides best practices for implementing a typeahead widget that prompts users to select an organization from the ROR registry, capturing creator affiliations and allowing users to search for variant names. It also advises against requiring ROR IDs, allowing users to enter text strings if no match is found, and considering filtering suggestions based on context.","keywords":"","robots":"index"},"mdx":{"altBody":"","status":"rdmd"},"api":{"method":"get","url":"","auth":"required","results":{"codes":[{"name":"","code":"{}","language":"json","status":200},{"name":"","code":"{}","language":"json","status":400}]},"params":[],"examples":{"codes":[]}},"next":{"description":"","pages":[{"type":"url","value":"https://ror-community.github.io/ror-typeahead-demos/","name":"ROR Typeahead Demos"},{"type":"url","value":"https://github.com/ror-community/ror-typeahead-demos","name":"ROR Typeahead Demos code repository"}]},"algolia":{"recordCount":16,"publishPending":false,"translationFailure":false,"updatedAt":"2024-08-30T20:06:32.160Z"},"title":"Create ROR-powered forms","icon":"","updates":[],"type":"basic","slug":"forms","excerpt":"","body":"> 🚧 Using ROR with standard form solutions\n> \n> The information on this page is aimed at developers who are building and maintaining web applications that include custom forms. If you are using a standard form solution such as Google Forms, we recommend collecting organization names as text in your form, generating a CSV file from the form responses, and then [matching the organization names to ROR IDs](doc:matching).\n\nIf your system includes fields that users enter affiliation information into, you can standardize that input and capture corresponding ROR IDs by adding a typeahead (or \"autosuggest\") widget that prompts users to select an organization from ROR. Learn more about best practices and implementation steps for using ROR in your application's forms here. \n\n![ROR typeahead demo showing a user entering variations on the name Cracow University of Economics into a form](https://files.readme.io/4f93231-cracow-ror-typeahead-new.gif)\n\n# General best practices\n\n## Capture affiliation with ROR\n\nUse a ROR-powered typeahead to capture creator affiliations (e.g., University of Wisconsin-Madison). Department, college, and other sub-units should be captured in a separate field, as in the examples below.\n\n## Allow users to search for variant names\n\nThe fields `name`, `acronyms`, `aliases`, and `labels` all include variations on an organization's name, any of which a user might and should be able to search for. The `?query` parameter of the ROR API will search an index of all these fields, but if you build your own search logic, make sure you configure your typeahead to allow searching for the values in any and all name-related fields. \n\nIn the below example, the ROR record for the University of Wisconsin-Madison, <https://ror.org/01y2jtd41>, has the single value \"University of Wisconsin-Madison\" in the `name` field, the value \"UW-Madison\" in the `aliases` field, the value `UW` in the `acronyms` field, and the organization's name in French and Spanish in the `labels` field. All values are searchable. \n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/8f07cc7-ror-typeahead-UW-Madison.png\",\n null,\n \"\"\n ],\n \"align\": \"center\"\n }\n ]\n}\n[/block]\n\n\n## Show information beyond the primary organization name\n\nIn addition to the primary organization name, display other ROR record fields in order to help users select the correct organization. We recommend including:\n\n- Name variations such as `acronyms`, `aliases`, and names in other languages (stored in the `labels` field). This is particularly important because a user's query should be able to match a name variation rather than the primary name in a ROR record.\n\n- Geographic information such as city and country.\n\n- Organization type.\n\nWe do not recommend displaying ROR IDs to end users.\n\n> 📘 Special considerations for displaying geographical information from ROR\n> \n> ### U.S. states\n> \n> Beginning with [Schema 2.0](doc:schema-v2), ROR metadata does not include U.S. states. ROR is a global registry, and most countries do not have an administrative region corresponding to the U.S. state. Note that our analysis shows that **there appear to be no records with duplicate name, city, and country** in the ROR registry, so users should be able to choose the correct organization based on name, city, and country alone, e.g., \"York University, Toronto, Canada\" (<https://ror.org/05fq50484>), \"York University, York, United States\" (<https://ror.org/022jz8688>) and \"York College, York, United Kingdom\" (<https://ror.org/04gaeyc40>). Developers who do wish to display state-level values can retrieve them from GeoNames using the GeoNames ID in the ROR record. \n> \n> ### Multiple locations\n> \n> Beginning with [Schema 2.0](doc:schema-v2), ROR metadata supports multiple locations in a single ROR record. The large majority of ROR records include only a single location; [ROR metadata policies](https://github.com/ror-community/ror-updates/wiki/ROR-Metadata-Policies#multiple-locations) outline the rare circumstances in which a ROR record will qualify for multiple locations. Developers who wish to pull location information from ROR should plan to accommodate multiple locations, for example by displaying all locations in a drop down or typeahead. In cases where records have multiple locations, no priority is specified and order is not significant. For this reason, displaying only the first location may not be appropriate for all cases. Additionally, in some cases, developers may wish to allow users to edit location fields within their application(s) to reflect the actual location of the user rather than forcing the use of a location from a ROR record.\n\n\n[block:image]\n{\n \"images\": [\n {\n \"image\": [\n \"https://files.readme.io/e3533da-ror-typeahead-University-of-Wisc-Madison.png\",\n null,\n \"\"\n ],\n \"align\": \"center\"\n }\n ]\n}\n[/block]\n\n\n## Do not require the ROR ID\n\nWe strongly discourage requiring users to enter only organizations with ROR IDs, because there are many valid reasons why a user may be unable to select an organization with a ROR ID as their affiliation: \n\n- The user may be affiliated with a research organization that is in scope for ROR but has not yet been added to the registry\n- The user may be affiliated with a research organization that is not in scope for ROR, such as a single-person consultancy\n- The user may be an independent researcher\n\nForms can still require users to give an institutional affiliation by allowing users to enter free text strings if no appropriate suggestion is made by the ROR typeahead.\n\n## Do not allow editing of the ROR organization name\n\nAfter a user chooses an organization from the list, don't allow them to edit the name, as this will likely result in incorrectly matched ROR IDs. Instead, prompt them to choose a new organization from the ROR list or else enter an organization name as a free text string.\n\n![](https://lh4.googleusercontent.com/s2orC1Hyx-blwbnAwAT2zvBEaU8jLZlvHXd_MBGoO41BRCvo8GZZtlFG_rkXet4mJwbA_sGT_LjOX0EsYhyJulpli2LTy9Kc_-U9rNap04olBUXQ5qb902aMnJrFw7wPLSkYd8UP5G2tYY47chwCqVZ7T7MBZ6toR_0ns_SYXOKjLC9sW2U7VgrQie2b)\n\n## Allow entering a text string if no ROR match is found\n\nAllow the user to enter the organization name as a text string if no appropriate option is suggested by the typeahead.\n\n![](https://lh6.googleusercontent.com/lZl0oiKuYUAytx8H-Rv9Oa93tcVCOtqhR6vrQlEnz5D3RxAy4hwV0Luja73MaHa4q6AqLFea4FHJzYfdDDCiXtH1QQdTcXcKy-_2-US5rEr3rSrUqxJIa8mgG0jya0k5_hQqJgbwrdqujOrpoly7Fb1Gn1h3Xsy54ohcyueV-OBZfU023GC0TI2bBrMS)\n\n## Allow users to provide multiple affiliations\n\nAllow users to provide multiple affiliations, since many users are affiliated with multiple organizations. In addition, many users are affiliated with **both** a high-level organization such as the [University of Wisconsin-Madison](https://ror.org/01y2jtd41) **and** a \"child\" research organization such as the [Morgridge Institute for Research](https://ror.org/05cb4rb43). Making the ROR-powered institutional affiliation field repeatable enables users to provide both affiliations. \n\nSee [ROR hierarchies and relationships](doc:relationships) for more information about parent, child, and sibling research organizations in ROR.\n\n![](https://files.readme.io/7b7847d-typeahead-morgridge.png)\n\n## Follow accessibility best practices\n\nFollow accessibility best practices for form controls, such [W3C Web accessibility initiative (WAI)](https://www.w3.org/WAI/), including:\n\n- Label and group form controls correctly\n\n- Include form instructions in a way that can be read by assistive technologies, such as screen readers\n\n- Ensure that keyboard/tab navigation is possible\n\n- Ensure that form controls function at a variety of screen sizes/zoom levels\n\n- Ensure that colors with sufficient contrast are used, and that color alone is not used to convey information\n\n## Consider filtering the list of suggestions displayed to the user\n\nConsider [Filtering](doc:api-filtering) the list of suggestions displayed to the user based on context, such as the user's email domain, organization type, or location (either browser geolocation or location information entered in other fields on the same form).\n\n![](https://lh3.googleusercontent.com/nr_HsqKJoVWObgIx27yqGTZNx84kWzSFUxQUwEercYX-01H1FzdYN2c0w5_hlTUbzoZd3nMsQVDexwhbdpQTH1-MWFotYjIhNyQ6d0IvLmP4JPbo6Zc2qBqAu54vaTiCjjRPSeMhCfTIyyPsybmSUGMpVKLBDaGAi8eX9C1Hav--EoI_A9E6itkT3rVh)\n\n## Consider populating other fields using ROR data\n\nConsider populating other fields in your form automatically using data from the ROR record selected by the user. See the list of ROR record fields in [ROR data structure](doc:data-structure).\n\n![](https://lh6.googleusercontent.com/aTclvWe9JZnZaMLH7W6e6tT91l1YC_TrpfOoDVgW1dRHY7vqxY2AOxORlSU3T2Ixfjz6vREyMjhooVAaVVQGv7ua20EqM9VaI-arubiYV6lEOjIKvcx59TB2zeMHydV7kNf9XeKAOPP5XVkKRbynRwl9ROTVtHtT8-86HUhpsJNP-95ZWVRqXTWkHzEZ)\n\n# Implementation approaches\n\n## ROR API\n\nA simple way to populate a typeahead widget is to query the ROR [REST API](doc:rest-api) in real time as the user types. While this approach has the advantage of being easy to implement, it comes with some disadvantages:\n\n- Slower/more variable response time vs querying data stored locally\n\n- Depends on being able to reach the ROR API\n\n- Performance may be impacted by other ROR API users\n\nSteps to implement a typeahead widget using the ROR [REST API](doc:rest-api) will vary depending on your system architecture, but may include the following:\n\n1. Send user input to the ROR API.\n\nAs the user types their affiliation, send the input to the ROR API. We recommend using the [query parameter](doc:api-query) search. You may also wish to first [check the heartbeat of the ROR API](doc:api-about#heartbeat). \n\n2. Parse results.\n\nResults are returned as a list of ROR records, ordered by matching score. Note that the matching score itself is not returned. Results are paginated, and the first 20 results are returned by default. See example responses in the [Query parameter](doc:api-query) section of the REST API guide. \n\n3. Display results.\n\nDisplay the top results to the user. In addition to the name, include information from ROR like acronyms, aliases, names in other languages, city, country, URL and organization type to help the user choose the correct result. We do not recommend displaying ROR IDs to users.\n\n4. Store selected result.\n\nStore the ROR ID for the selected result in your system along with any other required information. We recommend storing and displaying ROR IDs as full URLs in the form <https://ror.org/01y2jtd41>. Read more about the [ROR identifier pattern](doc:identifier).\n\n## ROR data dump\n\nRegardless of the source data, typeahead widgets perform faster when querying data stored locally vs making requests to external resources.\n\nWhile performance is much better and both data and search results can be tuned to meet the needs of a particular system, this approach requires more initial development time, as well as ongoing maintenance.\n\nSteps to implement a widget using the ROR [data dump](doc:data-dump) vary depending on your system architecture, but may include the following:\n\n1. Download and parse the ROR data dump into a local database.\n\n2. Create a search index.\n\n3. Create an internal API endpoint with logic to query the search index.\n\n4. Use your internal API endpoint to populate your typeahead widget, following the best practices above.\n\n5. Update your database and search index when new ROR data dumps are released.\n\n# Typeahead demos and code\n\n- Try our demonstration version of a ROR typeahead at <https://ror-community.github.io/ror-typeahead-demos/>\n- Take a look at the code for our ROR typeahead demos at <https://github.com/ror-community/ror-typeahead-demos>","order":0,"isReference":false,"deprecated":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"reusableContent":[],"previousSlug":"create-ror-powered-typeaheads","slugUpdatedAt":"2024-03-09T19:26:06.607Z","revision":90,"_id":"6388f77b6c803f0024576f3d","pendingAlgoliaPublish":false,"createdAt":"2022-12-01T18:50:35.957Z","updatedAt":"2024-08-30T20:06:32.167Z","user":"62a72c1fbac94d016a0d28fe","category":{"title":"Collecting ROR IDs","slug":"mapping-and-matching","order":7,"reference":false,"_id":"64426d364b8f4c00604bb504","project":"6058e47681775f002de04832","version":"6058e47681775f002de04837","createdAt":"2023-04-21T11:02:14.913Z","__v":0,"type":"guide","id":"64426d364b8f4c00604bb504"},"project":"6058e47681775f002de04832","version":{"version":"1","version_clean":"1.0.0","codename":"","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["6058e47681775f002de04839","6058e47681775f002de04839","6058e47681775f002de0483f","60d3d003d5ef44000f12c6c5","60de178b3321e40069edd8ac","63581e7c2875a60bd7564745","6376be56127d99000315eda9","64426d364b8f4c00604bb504","653c1e6f1cd9f1004b55cc72","65ec6c03aff86d0072a566d7"],"pdfStatus":"","_id":"6058e47681775f002de04837","project":"6058e47681775f002de04832","releaseDate":"2021-03-22T18:39:50.198Z","createdAt":"2021-03-22T18:39:50.198Z","__v":2,"updatedAt":"2024-04-11T20:46:41.458Z"},"__v":3,"parentDoc":null,"lastUpdatedHash":"dcecb3393ee4bfadd4cce8f7464eca8ea3321377","mdxAltBody":"","isApi":false,"tutorials":[],"id":"6388f77b6c803f0024576f3d"},"hideTOC":false,"meta":{"_id":"6388f77b6c803f0024576f3d","description":"This document provides best practices for implementing a typeahead widget that prompts users to select an organization from the ROR registry, capturing creator affiliations and allowing users to search for variant names. It also advises against requiring ROR IDs, allowing users to enter text strings...","hidden":false,"image":[],"keywords":"","metaTitle":"Create ROR-powered forms","parent":null,"robots":"index","slug":"forms","title":"Create ROR-powered forms","type":"docs"},"slugUrl":"/docs/forms","config":{"algoliaIndex":"readme_search_v2","amplitude":{"apiKey":"dc8065a65ef83d6ad23e37aaf014fc84","enabled":true},"asset_url":"https://cdn.readme.io","domain":"readme.io","domainFull":"https://dash.readme.com","encryptedLocalStorageKey":"ekfls-2024-05","fullstory":{"enabled":true,"orgId":"FSV9A"},"metrics":{"billingCronEnabled":"true","dashUrl":"https://m.readme.io","defaultUrl":"https://m.readme.io","exportMaxRetries":12,"wsUrl":"wss://m.readme.io"},"proxyUrl":"https://try.readme.io","readmeRecaptchaSiteKey":"6LesVBYpAAAAAESOCHOyo2kF9SZXPVb54Nwf3i2x","releaseVersion":"5.237.0","sentry":{"dsn":"https://3bbe57a973254129bcb93e47dc0cc46f@o343074.ingest.sentry.io/2052166","enabled":true,"tracesSampleRate":0},"shMigration":{"promoVideo":"","forceWaitlist":false},"sslBaseDomain":"readmessl.com","sslGenerationService":"ssl.readmessl.com","stripePk":"pk_live_5103PML2qXbDukVh7GDAkQoR4NSuLqy8idd5xtdm9407XdPR6o3bo663C1ruEGhXJjpnb2YCpj8EU1UvQYanuCjtr00t1DRCf2a","superHub":{"newProjectsEnabled":true},"wootric":{"accountToken":"NPS-122b75a4","enabled":true}},"context":{"labs":{},"user":{},"terms":[{"_id":"6058e47681775f002de04833","term":"parliament","definition":"Owls are generally solitary, but when seen together the group is called a 'parliament'!"}],"variables":{"user":{},"defaults":[]},"project":{"_id":"6058e47681775f002de04832","appearance":{"rdmd":{"callouts":{"useIconFont":false},"theme":{"background":"","border":"","markdownEdge":"","markdownFont":"","markdownFontSize":"","markdownLineHeight":"","markdownRadius":"","markdownText":"","markdownTitle":"","markdownTitleFont":"","mdCodeBackground":"","mdCodeFont":"","mdCodeRadius":"","mdCodeTabs":"","mdCodeText":"","tableEdges":"","tableHead":"","tableHeadText":"","tableRow":"","tableStripe":"","tableText":"","text":"","title":""}},"main_body":{"type":"links"},"colors":{"highlight":"","main":"#44A28F","main_alt":"","header_text":"","body_highlight":"","custom_login_link_color":""},"typography":{"headline":"Open+Sans:400:sans-serif","body":"Open+Sans:400:sans-serif","typekit":false,"tk_key":"","tk_headline":"","tk_body":""},"header":{"style":"solid","img":[],"img_size":"auto","img_pos":"tl"},"body":{"style":"none"},"global_landing_page":{"html":"","redirect":""},"referenceLayout":"row","link_logo_to_url":true,"theme":"solid","overlay":"triangles","landing":true,"sticky":false,"hide_logo":false,"childrenAsPills":false,"subheaderStyle":"links","splitReferenceDocs":false,"logo":["https://files.readme.io/4330c08-small-ror-logo-large.png","4330c08-small-ror-logo-large.png",125,80,"#000000","https://files.readme.io/e784d79-ror-logo-large.png","64c16bb48938310012444a6e"],"logo_white":["https://files.readme.io/dacd566-white-logo.png","dacd566-white-logo.png",125,80,"#ffffff","65ef46717fce1c0036177477"],"logo_white_use":false,"favicon":["https://files.readme.io/a931430-small-ror-icon-profile_2.png","ror-icon-profile (2).png",32,32,"#d8e0de","https://files.readme.io/a2115cf-ror-icon-profile_2.png"],"stylesheet":"","stylesheet_hub2":"","javascript":"","javascript_hub2":"","html_promo":"","html_body":"","html_footer":"","html_head":"","html_footer_meta":"","html_hidelinks":false,"showVersion":true,"hideTableOfContents":false,"nextStepsLabel":"Other resources you might find helpful","promos":[{"extras":{"type":"buttons","buttonPrimary":"get-started","buttonSecondary":"none"},"title":"ROR Documentation","text":"Comprehensive technical documentation for the Research Organization Registry (ROR), including ROR's metadata schema and REST API, plus implementation guides. Let's ROR!","_id":"6058e47681775f002de04834"}],"showMetricsInReference":true,"referenceSimpleMode":true,"stylesheet_hub3":"","loginLogo":[],"colorScheme":"light","logo_large":true,"changelog":{"layoutExpanded":false,"showAuthor":true,"showExactDate":false},"allowApiExplorerJsonEditor":false},"custom_domain":"","childrenProjects":[],"derivedPlan":"opensource","description":"Technical documentation for ROR, the Research Organization Registry, a global, community-led registry of open persistent identifiers for research organizations.","error404":"","experiments":[],"first_page":"landing","flags":{"allow_hub2":false,"enterprise":false,"alwaysShowDocPublishStatus":false,"hub2":true,"migrationRun":false,"migrationSwaggerRun":false,"oauth":false,"swagger":false,"correctnewlines":false,"rdmdCompatibilityMode":false,"speedyRender":false,"allowXFrame":false,"newEditor":true,"oldMarkdown":false,"useReactApp":true,"newMarkdownBetaProgram":true,"referenceRedesign":false,"disableAnonForum":false,"directGoogleToStableVersion":false,"translation":false,"staging":false,"newSearch":true,"allowApiExplorerJsonEditor":false,"newHeader":false,"auth0Oauth":false,"graphql":false,"singleProjectEnterprise":false,"dashReact":false,"allowReferenceUpgrade":false,"metricsV2":true,"enableRealtimeExperiences":false,"newEditorDash":true,"allowDarkMode":false,"forceDarkMode":false,"reviewWorkflow":true,"star":false,"useReactGLP":false,"disablePasswordlessLogin":false,"myDevelopers":false,"superHub":false,"allowReusableOTPs":false,"developerDashboard":false,"owlbotAi":false,"apiV2":false,"dashQuickstart":false,"git":{"read":false,"write":false},"superHubBeta":false,"customBlocks":false,"devDashHub":false,"disableAutoTranslate":false,"disableSAMLScoping":false,"allowUnsafeCustomHtmlSuggestionsFromNonAdmins":false,"apiAccessRevoked":false,"billingRedesignEnabled":true,"disableSignups":false,"passwordlessLogin":"default","developerPortal":false,"mdx":false,"superHubDevelopment":false,"annualBillingEnabled":true,"enableOidc":false,"changelogRssAlwaysPublic":false,"customComponents":false,"developerViewUsersData":false,"disableDiscussionSpamRecaptchaBypass":false,"bidiSync":false,"superHubMigrationSelfServeFlow":false},"fullBaseUrl":"https://ror.readme.io/","git":{"migration":{"createRepository":{},"transformation":{},"migratingPages":{},"enableSuperhub":{}},"sync":{"connectedRepository":{"organization":{},"privacy":{}},"installationRequest":{},"github":[]}},"glossaryTerms":[{"_id":"6058e47681775f002de04833","term":"parliament","definition":"Owls are generally solitary, but when seen together the group is called a 'parliament'!"}],"graphqlSchema":"","gracePeriod":{"enabled":false,"endsAt":null},"shouldGateDash":false,"hasOneChild":false,"healthCheck":{"provider":"","settings":{}},"intercom_secure_emailonly":false,"intercom":"","is_active":true,"internal":"","jwtExpirationTime":0,"landing_bottom":[{"type":"text","alignment":"left","title":"ROR v1 will be deprecated in 2025","text":"Have you switched yet to v2 of the ROR schema and API? Remember that v1 of ROR will be deprecated in 2025. Read more about [version 2 in the changelog](https://ror.readme.io/v2/changelog/2024-04-11-schema-api-v2) and flip the toggle to switch between documentation for v1 and v2."},{"type":"docs","alignment":"left","pageType":"Documentation"}],"mdxMigrationStatus":"rdmd","metrics":{"monthlyLimit":0,"thumbsEnabled":true,"planLimit":1000000,"realtime":{"dashEnabled":false,"hubEnabled":false},"monthlyPurchaseLimit":0,"meteredBilling":{}},"modules":{"landing":true,"docs":true,"examples":false,"reference":false,"changelog":true,"discuss":false,"suggested_edits":true,"logs":false,"custompages":false,"tutorials":false,"graphql":false},"name":"ROR","nav_names":{"docs":"","reference":"","changelog":"","discuss":"","tutorials":"","recipes":""},"oauth_url":"","onboardingCompleted":{"documentation":true,"appearance":true,"jwt":false,"api":true,"logs":false,"domain":false,"metricsSDK":false},"owlbot":{"enabled":false,"isPaying":false,"customization":{"answerLength":"long","customTone":"","defaultAnswer":"","forbiddenWords":"","tone":"neutral"},"copilot":{"enabled":false,"hasBeenUsed":false,"installedCustomPage":""}},"owner":{"id":null,"email":null,"name":null},"plan":"freelaunch","planOverride":"opensource","planSchedule":{"stripeScheduleId":null,"changeDate":null,"nextPlan":null},"planStatus":"","planTrial":"opensource","readmeScore":{"components":{"newDesign":{"enabled":true,"points":25},"reference":{"enabled":false,"points":50},"tryItNow":{"enabled":true,"points":35},"syncingOAS":{"enabled":false,"points":10},"customLogin":{"enabled":false,"points":25},"metrics":{"enabled":false,"points":40},"recipes":{"enabled":false,"points":15},"pageVoting":{"enabled":false,"points":1},"suggestedEdits":{"enabled":false,"points":10},"support":{"enabled":false,"points":5},"htmlLanding":{"enabled":false,"points":5},"guides":{"enabled":true,"points":10},"changelog":{"enabled":false,"points":5},"glossary":{"enabled":false,"points":1},"variables":{"enabled":false,"points":1},"integrations":{"enabled":false,"points":2}},"percentScore":25,"totalScore":70},"reCaptchaSiteKey":"","reference":{"alwaysUseDefaults":true,"defaultExpandResponseExample":false,"defaultExpandResponseSchema":false,"enableOAuthFlows":false},"seo":{"overwrite_title_tag":true},"stable":{"_id":"6058e47681775f002de04837","version":"1","version_clean":"1.0.0","codename":"","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["6058e47681775f002de04839","6058e47681775f002de04839","6058e47681775f002de0483f","60d3d003d5ef44000f12c6c5","60de178b3321e40069edd8ac","63581e7c2875a60bd7564745","6376be56127d99000315eda9","64426d364b8f4c00604bb504","653c1e6f1cd9f1004b55cc72","65ec6c03aff86d0072a566d7"],"project":"6058e47681775f002de04832","releaseDate":"2021-03-22T18:39:50.198Z","createdAt":"2021-03-22T18:39:50.198Z","__v":2,"updatedAt":"2024-04-11T20:46:41.458Z"},"subdomain":"ror","subpath":"","superHubWaitlist":false,"topnav":{"left":[{"type":"url","text":"Report a bug or request a feature","url":"https://github.com/ror-community/ror-roadmap/issues/new/choose"},{"type":"url","text":"Contact support","url":"mailto:support@ror.org"}],"right":[{"type":"user","text":"User","url":"/login?redirect_uri=/docs/forms"}],"edited":true,"bottom":[]},"trial":{"trialDeadlineEnabled":true,"trialEndsAt":"2021-04-05T18:39:50.145Z"},"translate":{"provider":"transifex","show_widget":false,"key_public":"","org_name":"","project_name":"","languages":[]},"url":"https://ror.org","versions":[{"_id":"6058e47681775f002de04837","version":"1","version_clean":"1.0.0","codename":"","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["6058e47681775f002de04839","6058e47681775f002de04839","6058e47681775f002de0483f","60d3d003d5ef44000f12c6c5","60de178b3321e40069edd8ac","63581e7c2875a60bd7564745","6376be56127d99000315eda9","64426d364b8f4c00604bb504","653c1e6f1cd9f1004b55cc72","65ec6c03aff86d0072a566d7"],"project":"6058e47681775f002de04832","releaseDate":"2021-03-22T18:39:50.198Z","createdAt":"2021-03-22T18:39:50.198Z","__v":2,"updatedAt":"2024-04-11T20:46:41.458Z"},{"_id":"66072096d9631f0054e8c118","version":"2","version_clean":"2.0.0","codename":"","is_stable":false,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["6058e47681775f002de04839","6058e47681775f002de04839","66072096d9631f0054e8c0ea","60d3d003d5ef44000f12c6c5","60de178b3321e40069edd8ac","63581e7c2875a60bd7564745","6376be56127d99000315eda9","66072096d9631f0054e8c0ee","66072096d9631f0054e8c0ef","66072096d9631f0054e8c0f0","66072097d9631f0054e8c11a"],"project":"6058e47681775f002de04832","releaseDate":"2021-03-22T18:39:50.198Z","createdAt":"2024-03-29T20:12:06.845Z","__v":0,"updatedAt":"2024-04-11T20:46:41.478Z","forked_from":"6058e47681775f002de04837"}],"variableDefaults":[],"webhookEnabled":false,"isHubEditable":true},"projectStore":{"data":{"allow_crawlers":"disabled","glossary":[{"_id":"6058e47681775f002de04833","term":"parliament","definition":"Owls are generally solitary, but when seen together the group is called a 'parliament'!"}],"canonical_url":null,"description":"Technical documentation for ROR, the Research Organization Registry, a global, community-led registry of open persistent identifiers for research organizations.","parent":null,"homepage_url":"https://ror.org","id":"6058e47681775f002de04832","is_migrated":false,"name":"ROR","redirects":[],"sitemap":"disabled","subdomain":"ror","suggested_edits":"enabled","uri":"/projects/me","variable_defaults":[],"webhooks":[],"custom_login":{"login_url":null,"logout_url":null},"onboarding_completed":{"api":true,"appearance":true,"documentation":true,"domain":false,"jwt":false,"logs":false,"metricsSDK":false},"pages":{"not_found":null},"privacy":{"view":"public","password":null},"reference":{"api_sdk_snippets":"enabled","defaults":"always_use","json_editor":"disabled","oauth_flows":"disabled","request_history":"enabled","response_examples":"collapsed","response_schemas":"collapsed"},"seo":{"overwrite_title_tag":"enabled"},"plan":{"type":"opensource","grace_period":{"enabled":false,"end_date":null},"trial":{"expired":false,"end_date":"2021-04-05T18:39:50.145Z"}},"health_check":{"provider":"none","settings":{"manual":{"status":"down","url":null},"statuspage":{"id":null}}},"integrations":{"bing":{"verify":null},"google":{"analytics":null,"site_verification":null},"heap":{"id":null},"koala":{"key":null},"localize":{"key":null},"recaptcha":{"site_key":null,"secret_key":null},"segment":{"key":null,"domain":null},"typekit":{"key":null},"zendesk":{"subdomain":null},"intercom":{"app_id":null,"secure_mode":{"key":null,"email_only":false}}},"permissions":{"appearance":{"private_label":"disabled","custom_code":{"css":"enabled","html":"disabled","js":"disabled"}}},"appearance":{"brand":{"primary_color":"#44A28F","link_color":null,"theme":"light"},"changelog":{"layout":"collapsed","show_author":true,"show_exact_date":false},"markdown":{"callouts":{"icon_font":"emojis"}},"table_of_contents":"enabled","whats_next_label":"Other resources you might find helpful","footer":{"readme_logo":"show"},"logo":{"size":"large","dark_mode":{"uri":null,"url":"https://files.readme.io/dacd566-white-logo.png","name":"dacd566-white-logo.png","width":125,"height":80,"color":"#ffffff","links":{"original_url":"65ef46717fce1c0036177477"}},"main":{"uri":"/images/64c16bb48938310012444a6e","url":"https://files.readme.io/4330c08-small-ror-logo-large.png","name":"4330c08-small-ror-logo-large.png","width":125,"height":80,"color":"#000000","links":{"original_url":"https://files.readme.io/e784d79-ror-logo-large.png"}},"favicon":{"uri":null,"url":"https://files.readme.io/a931430-small-ror-icon-profile_2.png","name":"ror-icon-profile (2).png","width":32,"height":32,"color":"#d8e0de","links":{"original_url":"https://files.readme.io/a2115cf-ror-icon-profile_2.png"}}},"custom_code":{"css":null,"js":null,"html":{"header":null,"home_footer":null,"page_footer":null}},"header":{"type":"solid","gradient_color":null,"overlay":{"fill":"auto","type":"triangles","position":"top-left","image":{"uri":null,"url":null,"name":null,"width":null,"height":null,"color":null,"links":{"original_url":null}}}},"navigation":{"first_page":"landing_page","left":[{"type":"link_url","title":"Report a bug or request a feature","url":"https://github.com/ror-community/ror-roadmap/issues/new/choose","custom_page":null},{"type":"link_url","title":"Contact support","url":"mailto:support@ror.org","custom_page":null}],"logo_link":"homepage","right":[{"type":"user_controls","title":null,"url":null,"custom_page":null}],"sub_nav":[],"subheader_layout":"links","version":"enabled","links":{"home":{"label":"Home","visibility":"enabled"},"graphql":{"label":"GraphQL","visibility":"disabled"},"guides":{"label":"Guides","alias":null,"visibility":"enabled"},"reference":{"label":"API Reference","alias":null,"visibility":"disabled"},"recipes":{"label":"Recipes","alias":null,"visibility":"disabled"},"changelog":{"label":"Changelog","alias":null,"visibility":"enabled"},"discussions":{"label":"Discussions","alias":null,"visibility":"disabled"}}}}}},"version":{"_id":"6058e47681775f002de04837","version":"1","version_clean":"1.0.0","codename":"","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["6058e47681775f002de04839","6058e47681775f002de04839","6058e47681775f002de0483f","60d3d003d5ef44000f12c6c5","60de178b3321e40069edd8ac","63581e7c2875a60bd7564745","6376be56127d99000315eda9","64426d364b8f4c00604bb504","653c1e6f1cd9f1004b55cc72","65ec6c03aff86d0072a566d7"],"project":"6058e47681775f002de04832","releaseDate":"2021-03-22T18:39:50.198Z","createdAt":"2021-03-22T18:39:50.198Z","__v":2,"updatedAt":"2024-04-11T20:46:41.458Z"}},"reqUrl":"/docs/forms","version":{"_id":"6058e47681775f002de04837","version":"1","version_clean":"1.0.0","codename":"","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["6058e47681775f002de04839","6058e47681775f002de04839","6058e47681775f002de0483f","60d3d003d5ef44000f12c6c5","60de178b3321e40069edd8ac","63581e7c2875a60bd7564745","6376be56127d99000315eda9","64426d364b8f4c00604bb504","653c1e6f1cd9f1004b55cc72","65ec6c03aff86d0072a566d7"],"project":"6058e47681775f002de04832","releaseDate":"2021-03-22T18:39:50.198Z","createdAt":"2021-03-22T18:39:50.198Z","__v":2,"updatedAt":"2024-04-11T20:46:41.458Z"},"lang":"en","langFull":"Default","isDetachedProductionSite":false}"></script></div><div id="hub-container"><div class="hub-container"><div state-container ng-attr-id="{{state.current().root !== 'docs' && 'react-app-content-container'}}"><div id="replace-view" ng-non-bindable></div></div></div></div><script>var is_hub = true; var is_hub2 = true; var is_hub_edit = true; </script><div id="ssr-end"><script id="__LOADABLE_REQUIRED_CHUNKS__" type="application/json">[6859,1802,9772,3284,7449,7372,9082,572,5312,2406,2395,6522,7112,73,8263,1282,2852,3880,7783,1456,1666,5798,4935,6841,6722,1936,9575,1080,9852,8684,7971,153,1313,1343,6060,8063]</script><script id="__LOADABLE_REQUIRED_CHUNKS___ext" type="application/json">{"namedChunks":["routes-SuperHub","Header","routes-PageNotFound","Footer","core-icons-chevron-up-down-svg","routes-Doc","core-icons-arrow-right-svg","Editor","core-icons-x-circle-svg","core-icons-suggested-edits-svg","routes-Reference","core-icons-more-vertical-svg","core-icons-lock-svg","core-icons-arrow-up-right-svg"]}</script> <script async data-chunk="main" src="https://cdn.readme.io/public/hub/web/main.c0c0548d7f95cc33138b.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/6859.fc1496da022e612abe33.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/1802.00a1e88cc0d9da2aae1b.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/9772.1912e092b9c8785ff5c3.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/3284.6ecd6ef27e2009d3fdc7.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/7449.dae0332305a8704415a6.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/7372.aa4569536a36087cf4a9.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/9082.f9fa9ec2b80af1ef61bd.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/572.bab1eda8453360a8a761.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/5312.ca2c08ec1b75bb03c21e.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/2406.951963c0cf542b4b86a4.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/2395.6288c030d5183baa5a89.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/6522.057d8ea587133ae98687.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/7112.69c3d611e7e54e411b26.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/73.530027393a282a78b6b8.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/8263.3d098f45b4b562ec80b5.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/1282.591f476c316bf3670bbd.js"></script> <script async data-chunk="routes-SuperHub" src="https://cdn.readme.io/public/hub/web/routes-SuperHub.e3831663c122c753731b.js"></script> <script async data-chunk="Header" src="https://cdn.readme.io/public/hub/web/3880.3892311d81c548cb073c.js"></script> <script async data-chunk="Header" src="https://cdn.readme.io/public/hub/web/7783.48ca7ef3a5c469d97e53.js"></script> <script async data-chunk="Header" src="https://cdn.readme.io/public/hub/web/Header.ad57d9fcd570c04fb712.js"></script> <script async data-chunk="routes-PageNotFound" src="https://cdn.readme.io/public/hub/web/routes-PageNotFound.84a460336ee9c83a7d55.js"></script> <script async data-chunk="Footer" src="https://cdn.readme.io/public/hub/web/Footer.eb98b86c4279989f5a59.js"></script> <script async data-chunk="core-icons-chevron-up-down-svg" src="https://cdn.readme.io/public/hub/web/core-icons-chevron-up-down-svg.6aae957df71e6f4c5e24.js"></script> <script async data-chunk="routes-Doc" src="https://cdn.readme.io/public/hub/web/6841.587d285d41ca8bab11b1.js"></script> <script async data-chunk="routes-Doc" src="https://cdn.readme.io/public/hub/web/6722.7602d4c7190304faffd4.js"></script> <script async data-chunk="routes-Doc" src="https://cdn.readme.io/public/hub/web/routes-Doc.e3a4e0817a9a640436bc.js"></script> <script async data-chunk="core-icons-arrow-right-svg" src="https://cdn.readme.io/public/hub/web/core-icons-arrow-right-svg.eadb74658f93b4e7d75f.js"></script> <script async data-chunk="Editor" src="https://cdn.readme.io/public/hub/web/Editor.a0c700eb9ae5192d6433.js"></script> <script async data-chunk="core-icons-x-circle-svg" src="https://cdn.readme.io/public/hub/web/core-icons-x-circle-svg.abc0e0ea5b7f9dff667c.js"></script> <script async data-chunk="core-icons-suggested-edits-svg" src="https://cdn.readme.io/public/hub/web/core-icons-suggested-edits-svg.8d2d8ac2fd22ded9238d.js"></script> <script async data-chunk="routes-Reference" src="https://cdn.readme.io/public/hub/web/7971.db270c2970b791e38435.js"></script> <script async data-chunk="routes-Reference" src="https://cdn.readme.io/public/hub/web/153.e4db5a313c7d51383015.js"></script> <script async data-chunk="routes-Reference" src="https://cdn.readme.io/public/hub/web/routes-Reference.d66a49f09580aafdabb6.js"></script> <script async data-chunk="core-icons-more-vertical-svg" src="https://cdn.readme.io/public/hub/web/core-icons-more-vertical-svg.4822b3f831e11095980d.js"></script> <script async data-chunk="core-icons-lock-svg" src="https://cdn.readme.io/public/hub/web/core-icons-lock-svg.70942d3ee6bad6267696.js"></script> <script async data-chunk="core-icons-arrow-up-right-svg" src="https://cdn.readme.io/public/hub/web/core-icons-arrow-up-right-svg.8ec73f7e322d79a2695b.js"></script></div><script id="hub-me" type="application/json" data-json="{"loggedIn":false,"search":{"app":"T28YKFATPY","token":"ODczNzdiMDdiZDc1ZWRiOGQyYWVlYzVjMTdiMjg3ZmEwNWUyZDk3YWJlMDc5ZTliNmFhNTE2ZWY3ZDhiOGUyZnRhZ0ZpbHRlcnM9KHByb2plY3Q6NjA1OGU0NzY4MTc3NWYwMDJkZTA0ODMyKSwodmVyc2lvbjpub25lLHZlcnNpb246NjA1OGU0NzY4MTc3NWYwMDJkZTA0ODM3KSwoaGlkZGVuOm5vbmUsaGlkZGVuOmZhbHNlKSwoaW5kZXg6Q3VzdG9tUGFnZSxpbmRleDpQYWdlLGluZGV4OkJsb2cp","filters":"tagFilters=(project:6058e47681775f002de04832),(version:none,version:6058e47681775f002de04837),(hidden:none,hidden:false),(index:CustomPage,index:Page,index:Blog)","metaData":[{"modules":{"landing":true,"docs":true,"examples":false,"reference":false,"changelog":true,"discuss":false,"suggested_edits":true,"logs":false,"custompages":false,"tutorials":false,"graphql":false},"id":"6058e47681775f002de04832","name":"ROR","subdomain":"ror","subpath":"","nav_names":{"docs":"","reference":"","changelog":"","discuss":"","tutorials":"","recipes":""}}]}}"></script><script id="readme-data-baseUrl" type="application/json" data-json=""/""></script></body></html>