Let agents search photos, list albums, read metadata, and upload media through the Google Photos API, with OAuth tokens injected by the gateway.
Per-app Google setup is deprecated. All Google apps now share one Google OAuth client and one Redirect URI. To use your own client, follow the Google setup guide. Credentials saved for one Google app apply to all of them.
OneCLI connects AI agents to Google Photos through Google’s OAuth flow. Agents can search for photos and videos, read media metadata, and manage albums. The gateway injects OAuth credentials into requests to the Google Photos Library API automatically.This is useful for agents that need to find images for content creation, organize photo libraries, or extract metadata from media files.
This applies on OneCLI Cloud and self-hosted alike. One Google client serves every Google app in OneCLI, so you set it up once. If you already did it for another Google app, skip to step 2.
1. Set up your Google client
Follow the Google setup guide. It enables the Google APIs, sets up the consent screen, creates the OAuth client, and adds the Redirect URI.
2. Connect Google Photos
Open Connections > Google Photos, select Connect Google Photos, pick your Google account, and click Allow.
The Google Photos connect window before a Google client is set up.
Access is per agent: grant the connection to each agent that needs it, choosing per tool what runs freely, what needs human approval, and what stays blocked — a read-only agent is a single grant. Organization rules add guardrails on top, like rate limits and blanket blocks. Everything is checked before credential injection, so a blocked request never reaches Google Photos.
Yes. Follow the Google setup guide once. One client serves every Google app in OneCLI, so if you set it up for another app, skip to connecting.
Does the agent see my Google OAuth token?
No. The token stays in OneCLI, and the gateway adds it to Photos API requests at the proxy. See How it works.
Can an agent browse photos without uploading?
Yes. When you grant the connection, allow the read tools and block or require approval for uploads and album changes.
How do I reconnect Google Photos?
Open Connections > Google Photos and connect again. Agents with access use the new connection automatically.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OneCLI","colors":{"primary":"#19BA5D","light":"#34D474","dark":"#128A45"},"logo":{"light":"https://mintcdn.com/chartdbinc/3IvBQeNyWpN0X2ob/logo/logo-full-light.svg?fit=max\u0026auto=format\u0026n=3IvBQeNyWpN0X2ob\u0026q=85\u0026s=630ee6bb5c7441548135c690b3e18d35","dark":"https://mintcdn.com/chartdbinc/3IvBQeNyWpN0X2ob/logo/logo-full-dark.svg?fit=max\u0026auto=format\u0026n=3IvBQeNyWpN0X2ob\u0026q=85\u0026s=c80db357e121f4676dba423c01304258","href":"/"},"favicon":"https://mintcdn.com/chartdbinc/wh8636A1-I7XVdgP/favicon.png?fit=max\u0026auto=format\u0026n=wh8636A1-I7XVdgP\u0026q=85\u0026s=71b6d9b7afc7659e690354e389db9da8","appearance":{"default":"light"},"background":{"color":{"light":"#FAFAF9","dark":"#1A1918"}},"navbar":{"links":[{"href":"https://github.com/onecli/onecli","label":"GitHub"},{"href":"https://onecli.sh","label":"Install"}]},"footer":{"socials":{"github":"https://github.com/onecli"}},"fonts":{"heading":{"family":"Overused Grotesk","weight":600,"source":"fonts/OverusedGroteskRoman-VF.woff2","format":"woff2"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"https://mintlify.s3.us-west-1.amazonaws.com/chartdbinc/images/github.svg","href":"https://github.com/onecli"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"chartdbinc","hasAudioNarration":false,"actualSubdomain":"chartdbinc","customDomains":["onecli.sh"],"gitSource":{"type":"github","owner":"onecli","repo":"onecli-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae93dff859b9b27a0220555","collectionId":"4253288a-7e3f-4857-a015-60ff48e38182","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae93dff859b9b27a0220555"},"entitlements":{},"buildId":"6aed6ecd1adb743cd28e52b5","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API Reference","count":240},{"language":"default","tag":"Workspace","count":105},{"language":"default","tag":"Integrations","count":88},{"language":"default","tag":"All app connections","count":64},{"language":"default","tag":"Enterprise","count":57},{"language":"default","tag":"Organization","count":52},{"language":"default","tag":"Apps","count":29},{"language":"default","tag":"Channels","count":28},{"language":"default","tag":"Platform","count":21},{"language":"default","tag":"Guides","count":17}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"a.nav-anchor div.mr-4.rounded-md{--tw-ring-color: transparent !important;--tw-ring-shadow: 0 0 0 0 transparent !important;--tw-ring-offset-shadow: 0 0 0 0 transparent !important;box-shadow:none!important;background:transparent!important;filter:none!important;transition:opacity 0.15s ease!important}a.nav-anchor:hover div.mr-4.rounded-md{--tw-ring-color: transparent !important;--tw-ring-shadow: 0 0 0 0 transparent !important;--tw-ring-offset-shadow: 0 0 0 0 transparent !important;box-shadow:none!important;background:transparent!important;filter:none!important;opacity:0.7!important}a.nav-anchor div.mr-4.rounded-md img{opacity:1!important;filter:none!important;background:transparent!important}a.nav-anchor:hover div.mr-4.rounded-md img{opacity:1!important;filter:none!important;background:transparent!important}.dark a.nav-anchor div.mr-4.rounded-md img,[data-theme=\"dark\"] a.nav-anchor div.mr-4.rounded-md img{filter:invert(1)!important}"}],"page":{"pagePath":"integrations/google-photos","slug":"/integrations/google-photos","pageMetadata":{"title":"Search and Organize Google Photos With AI Agents","sidebarTitle":"Google Photos","description":"Let agents search photos, list albums, read metadata, and upload media through the Google Photos API, with OAuth tokens injected by the gateway.","canonical":"https://onecli.sh/docs/integrations/google-photos","href":"/integrations/google-photos"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Let agents search photos, list albums, read metadata, and upload media through the Google Photos API, with OAuth tokens injected by the gateway.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Frame,Heading,Info,OptimizedImage,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Per-app Google setup is deprecated.`}),` All Google apps now share one Google OAuth client and one Redirect URI. To use your own client, follow the `,_jsx(_components.a,{href:`/integrations/google`,children:`Google setup guide`}),`. Credentials saved for one Google app apply to all of them.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`OneCLI connects AI agents to Google Photos through Google’s OAuth flow. Agents can search for photos and videos, read media metadata, and manage albums. The gateway injects OAuth credentials into requests to the Google Photos Library API automatically.`}),`\n`,_jsx(_components.p,{children:`This is useful for agents that need to find images for content creation, organize photo libraries, or extract metadata from media files.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-you-will-set-up`,children:`What you will set up`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`A Google OAuth client shared by every Google app in OneCLI`}),`\n`,_jsx(_components.li,{children:`A Google Photos connection authorized with your Google account`}),`\n`,_jsx(_components.li,{children:`Automatic token injection on requests to the Google Photos API`}),`\n`,_jsx(_components.li,{children:`Per-agent, per-tool access to your library`}),`\n`]}),`\n`,_jsx(`a`,{id:`self-hosted`,style:{scrollMarginTop:`8rem`}}),`\n`,_jsx(Heading,{level:`2`,id:`connect-google-photos`,children:`Connect Google Photos`}),`\n`,_jsx(Info,{children:_jsx(_components.p,{children:`This applies on OneCLI Cloud and self-hosted alike. One Google client serves every Google app in OneCLI, so you set it up once. If you already did it for another Google app, skip to step 2.`})}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`1. Set up your Google client`,defaultOpen:true,id:`1-set-up-your-google-client`,children:_jsxs(_components.p,{children:[`Follow the `,_jsx(_components.a,{href:`/integrations/google`,children:`Google setup guide`}),`. It enables the Google APIs, sets up the consent screen, creates the OAuth client, and adds the Redirect URI.`]})}),_jsxs(Accordion,{title:`2. Connect Google Photos`,id:`2-connect-google-photos`,children:[_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Connections`}),` > `,_jsx(_components.strong,{children:`Google Photos`}),`, select `,_jsx(_components.strong,{children:`Connect Google Photos`}),`, pick your Google account, and click `,_jsx(_components.strong,{children:`Allow`}),`.`]}),_jsx(Frame,{caption:`The Google Photos connect window before a Google client is set up.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/chartdbinc/L4k9tYUENUtEpMY8/images/integrations/google-photos/onecli-connect-google-photos.png?fit=max\u0026auto=format\u0026n=L4k9tYUENUtEpMY8\u0026q=85\u0026s=d69df7ff18a61ea93417941b0995efa7`,alt:`OneCLI connect window for Google Photos showing Configuration required, the setup guide link, and the Configure credentials button.`,\"data-og-width\":`1056`,width:`1056`,\"data-og-height\":`1084`,height:`1084`,\"data-path\":`images/integrations/google-photos/onecli-connect-google-photos.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/chartdbinc/L4k9tYUENUtEpMY8/images/integrations/google-photos/onecli-connect-google-photos.png?w=280\u0026fit=max\u0026auto=format\u0026n=L4k9tYUENUtEpMY8\u0026q=85\u0026s=302e1be8eb47d1b6049fe56c37ab562b 280w, https://mintcdn.com/chartdbinc/L4k9tYUENUtEpMY8/images/integrations/google-photos/onecli-connect-google-photos.png?w=560\u0026fit=max\u0026auto=format\u0026n=L4k9tYUENUtEpMY8\u0026q=85\u0026s=0e01f4ecfd2f414a98ffaa630b2cf20d 560w, https://mintcdn.com/chartdbinc/L4k9tYUENUtEpMY8/images/integrations/google-photos/onecli-connect-google-photos.png?w=840\u0026fit=max\u0026auto=format\u0026n=L4k9tYUENUtEpMY8\u0026q=85\u0026s=dc65b28f6c247cee2264768bc935ca33 840w, https://mintcdn.com/chartdbinc/L4k9tYUENUtEpMY8/images/integrations/google-photos/onecli-connect-google-photos.png?w=1100\u0026fit=max\u0026auto=format\u0026n=L4k9tYUENUtEpMY8\u0026q=85\u0026s=24bfb2c01035bb7e0e3170ade920a5d0 1100w, https://mintcdn.com/chartdbinc/L4k9tYUENUtEpMY8/images/integrations/google-photos/onecli-connect-google-photos.png?w=1650\u0026fit=max\u0026auto=format\u0026n=L4k9tYUENUtEpMY8\u0026q=85\u0026s=1d5dd50b8cfbd770e0096df3786d8ec9 1650w, https://mintcdn.com/chartdbinc/L4k9tYUENUtEpMY8/images/integrations/google-photos/onecli-connect-google-photos.png?w=2500\u0026fit=max\u0026auto=format\u0026n=L4k9tYUENUtEpMY8\u0026q=85\u0026s=62b638e9781fc02a2fba8a1a538e1ec4 2500w`})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-agents-can-do`,children:`What agents can do`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Search for photos and videos by date, category, or content type`}),`\n`,_jsx(_components.li,{children:`List all media items in the library with pagination`}),`\n`,_jsx(_components.li,{children:`Read media item metadata (creation time, dimensions, camera info, location)`}),`\n`,_jsx(_components.li,{children:`Download media item content via base URLs`}),`\n`,_jsx(_components.li,{children:`Create new albums`}),`\n`,_jsx(_components.li,{children:`Add media items to albums`}),`\n`,_jsx(_components.li,{children:`List albums and shared albums`}),`\n`,_jsx(_components.li,{children:`Read album details (title, cover photo, item count)`}),`\n`,_jsx(_components.li,{children:`Upload new media items to the library`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`controlling-access`,children:`Controlling access`}),`\n`,_jsxs(_components.p,{children:[`Access is per agent: `,_jsx(_components.a,{href:`/guides/agent-access`,children:`grant`}),` the connection to each agent that needs it, choosing per tool what runs freely, what needs human approval, and what stays blocked — a read-only agent is a single grant. Organization `,_jsx(_components.a,{href:`/guides/rules`,children:`rules`}),` add guardrails on top, like rate limits and blanket blocks. Everything is checked before credential injection, so a blocked request never reaches Google Photos.`]}),`\n`,_jsx(Heading,{level:`2`,id:`faq`,children:`FAQ`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Do I need my own Google client for Google Photos?`,id:`do-i-need-my-own-google-client-for-google-photos`,children:_jsxs(_components.p,{children:[`Yes. Follow the `,_jsx(_components.a,{href:`/integrations/google`,children:`Google setup guide`}),` once. One client serves every Google app in OneCLI, so if you set it up for another app, skip to connecting.`]})}),_jsx(Accordion,{title:`Does the agent see my Google OAuth token?`,id:`does-the-agent-see-my-google-oauth-token`,children:_jsxs(_components.p,{children:[`No. The token stays in OneCLI, and the gateway adds it to Photos API requests at the proxy. See `,_jsx(_components.a,{href:`/how-it-works`,children:`How it works`}),`.`]})}),_jsx(Accordion,{title:`Can an agent browse photos without uploading?`,id:`can-an-agent-browse-photos-without-uploading`,children:_jsxs(_components.p,{children:[`Yes. When you `,_jsx(_components.a,{href:`/guides/agent-access`,children:`grant`}),` the connection, allow the read tools and block or require approval for uploads and album changes.`]})}),_jsx(Accordion,{title:`How do I reconnect Google Photos?`,id:`how-do-i-reconnect-google-photos`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Connections`}),` > `,_jsx(_components.strong,{children:`Google Photos`}),` and connect again. Agents with access use the new connection automatically.`]})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Search and Organize Google Photos With AI Agents","sidebarTitle":"Google Photos","description":"Let agents search photos, list albums, read metadata, and upload media through the Google Photos API, with OAuth tokens injected by the gateway.","canonical":"https://onecli.sh/docs/integrations/google-photos","href":"/integrations/google-photos"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"What you will set up","slug":"what-you-will-set-up","depth":2,"children":[]},{"title":"Connect Google Photos","slug":"connect-google-photos","depth":2,"children":[]},{"title":"What agents can do","slug":"what-agents-can-do","depth":2,"children":[]},{"title":"Controlling access","slug":"controlling-access","depth":2,"children":[]},{"title":"FAQ","slug":"faq","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/chartdbinc/e8c5fc0faf4d8de9/infra/cloudfront/docs-response-headers.js"],"subdomain":"chartdbinc","siteName":"OneCLI","title":"Search and Organize Google Photos With AI Agents - OneCLI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-03T01:51:11.695Z","originalFileLocation":"integrations/google-photos.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Let agents search photos, list albums, read metadata, and upload media through the Google Photos API, with OAuth tokens injected by the gateway.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OneCLI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/chartdbinc/M5-fw7HRdTdsqSgf/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/chartdbinc/M5-fw7HRdTdsqSgf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/chartdbinc/M5-fw7HRdTdsqSgf/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/chartdbinc/M5-fw7HRdTdsqSgf/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/chartdbinc/M5-fw7HRdTdsqSgf/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/chartdbinc/M5-fw7HRdTdsqSgf/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/chartdbinc/M5-fw7HRdTdsqSgf/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/chartdbinc/M5-fw7HRdTdsqSgf/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/chartdbinc/M5-fw7HRdTdsqSgf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Search and Organize Google Photos With AI Agents - OneCLI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Let agents search photos, list albums, read metadata, and upload media through the Google Photos API, with OAuth tokens injected by the gateway.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OneCLI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://onecli.sh/docs/integrations/google-photos\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://chartdbinc.mintlify.site/docs/_mintlify/api/og/v2?division=All+app+connections\u0026amp;title=Search+and+Organize+Google+Photos+With+AI+Agents\u0026amp;description=Let+agents+search+photos%2C+list+albums%2C+read+metadata%2C+and+upload+media+through+the+Google+Photos+API%2C+with+OAuth+tokens+injected+by+the+gateway.\u0026amp;theme=4d31f9e8e68b774b9a2b22f5\u0026amp;signature=d7c6bf18376e4ccf7479a898960a8bcb6f77c79b18c8b83807b9989cfc8c60dd\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Search and Organize Google Photos With AI Agents - OneCLI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Let agents search photos, list albums, read metadata, and upload media through the Google Photos API, with OAuth tokens injected by the gateway.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://chartdbinc.mintlify.site/docs/_mintlify/api/og/v2?division=All+app+connections\u0026amp;title=Search+and+Organize+Google+Photos+With+AI+Agents\u0026amp;description=Let+agents+search+photos%2C+list+albums%2C+read+metadata%2C+and+upload+media+through+the+Google+Photos+API%2C+with+OAuth+tokens+injected+by+the+gateway.\u0026amp;theme=4d31f9e8e68b774b9a2b22f5\u0026amp;signature=d7c6bf18376e4ccf7479a898960a8bcb6f77c79b18c8b83807b9989cfc8c60dd\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/chartdbinc/M5-fw7HRdTdsqSgf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OneCLI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#19BA5D\">\u003clink data-mint-head rel=\"canonical\" href=\"https://onecli.sh/docs/integrations/google-photos\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/integrations/google-photos.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://onecli.sh/#organization\",\"name\":\"OneCLI\",\"url\":\"https://onecli.sh\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/chartdbinc/3IvBQeNyWpN0X2ob/logo/logo-full-light.svg?fit=max\u0026auto=format\u0026n=3IvBQeNyWpN0X2ob\u0026q=85\u0026s=630ee6bb5c7441548135c690b3e18d35\"}},{\"@type\":\"WebSite\",\"@id\":\"https://onecli.sh/docs#website\",\"name\":\"OneCLI\",\"url\":\"https://onecli.sh/docs\",\"publisher\":{\"@id\":\"https://onecli.sh/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://onecli.sh/docs/integrations/google-photos#webpage\",\"url\":\"https://onecli.sh/docs/integrations/google-photos\",\"name\":\"Search and Organize Google Photos With AI Agents\",\"description\":\"Let agents search photos, list albums, read metadata, and upload media through the Google Photos API, with OAuth tokens injected by the gateway.\",\"dateModified\":\"2026-11-03T01:51:11.695Z\",\"isPartOf\":{\"@id\":\"https://onecli.sh/docs#website\"},\"breadcrumb\":{\"@id\":\"https://onecli.sh/docs/integrations/google-photos#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://onecli.sh/docs/integrations/google-photos#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"All app connections\",\"item\":\"https://onecli.sh/docs/integrations/affinity\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Search and Organize Google Photos With AI Agents\",\"item\":\"https://onecli.sh/docs/integrations/google-photos\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://onecli.sh/docs/integrations/google-photos#article\",\"headline\":\"Search and Organize Google Photos With AI Agents\",\"name\":\"Search and Organize Google Photos With AI Agents\",\"description\":\"Let agents search photos, list albums, read metadata, and upload media through the Google Photos API, with OAuth tokens injected by the gateway.\",\"url\":\"https://onecli.sh/docs/integrations/google-photos\",\"mainEntityOfPage\":{\"@id\":\"https://onecli.sh/docs/integrations/google-photos#webpage\"},\"dateModified\":\"2026-11-03T01:51:11.695Z\",\"publisher\":{\"@id\":\"https://onecli.sh/#organization\"},\"isPartOf\":{\"@id\":\"https://onecli.sh/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OneCLI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OneCLI","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"https://mintlify.s3.us-west-1.amazonaws.com/chartdbinc/images/github.svg","href":"https://github.com/onecli"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"Integrations","groups":[{"group":"Integrations","root":{"title":"Integrations: Connect Agents to External Services","sidebarTitle":"Overview","href":"/integrations"},"pages":[{"title":"App Connections: How OAuth \u0026 API Keys Work","sidebarTitle":"App Connections","href":"/integrations/app-connections"},{"title":"Custom Connections: Connect Any API With a Key","sidebarTitle":"Custom connections","href":"/integrations/custom-connections"},{"title":"Chat With AI Agents and Approve Actions in Slack","sidebarTitle":"Slack","href":"/integrations/slack"},{"title":"Keep LLM API Keys Out of Your AI Agents","sidebarTitle":"LLMs","href":"/integrations/llms"},{"title":"External Vaults: Connect Password Managers","sidebarTitle":"External Vaults","href":"/vaults/overview"}]},{"group":"Cloud integrations","pages":[{"title":"Prospect and Enrich Leads in Apollo.io With Agents","sidebarTitle":"Apollo.io","href":"/integrations/apollo-io"},{"title":"Use AWS From AI Agents Without Exposing Keys","sidebarTitle":"AWS","href":"/integrations/aws"},{"title":"Let AI Agents Open PRs and Issues on GitHub","sidebarTitle":"GitHub","href":"/integrations/github"},{"title":"Org-Approved GitHub Repo Access for AI Agents","sidebarTitle":"GitHub App","href":"/integrations/github-app"},{"title":"Let AI Agents Query Datadog Metrics and Monitors","sidebarTitle":"Datadog","href":"/integrations/datadog"},{"title":"Let AI Agents Update HubSpot CRM Records","sidebarTitle":"HubSpot","href":"/integrations/hubspot"},{"title":"Let AI Agents Triage Sentry Errors","sidebarTitle":"Sentry","href":"/integrations/sentry"},{"title":"Let AI Agents Read and Write OneNote Notebooks","sidebarTitle":"Microsoft OneNote","href":"/integrations/microsoft-onenote"},{"title":"Connect AI Agents to Outlook Mail in Microsoft 365","sidebarTitle":"Outlook Mail","href":"/integrations/outlook-mail"},{"title":"Let AI Agents Book Meetings in Outlook Calendar","sidebarTitle":"Outlook Calendar","href":"/integrations/outlook-calendar"}]},{"group":"All app connections","pages":[{"title":"Connect AI Agents to Affinity CRM With an API Key","sidebarTitle":"Affinity","href":"/integrations/affinity"},{"title":"Let AI Agents Manage Attio CRM Records","sidebarTitle":"Attio","href":"/integrations/attio"},{"title":"Run Clay Enrichment From AI Agents","sidebarTitle":"Clay","href":"/integrations/clay"},{"title":"Query PostHog Analytics and Flags From Agents","sidebarTitle":"PostHog","href":"/integrations/posthog"},{"title":"Connect AI Agents to Salesforce With an External App","sidebarTitle":"Salesforce","href":"/integrations/salesforce"},{"title":"Turn Timeless Meetings Into Agent Follow-Ups","sidebarTitle":"Timeless","href":"/integrations/timeless"},{"title":"Let Agents Search Circleback Meeting Notes","sidebarTitle":"Circleback","href":"/integrations/circleback"},{"title":"Run HeyReach LinkedIn Campaigns From AI Agents","sidebarTitle":"HeyReach","href":"/integrations/heyreach"},{"title":"Automate Dripify LinkedIn Outreach With Agents","sidebarTitle":"Dripify","href":"/integrations/dripify"},{"title":"Let On-Call Agents Triage PagerDuty Incidents","sidebarTitle":"PagerDuty","href":"/integrations/pagerduty"},{"title":"Query Coralogix Logs and Metrics From Agents","sidebarTitle":"Coralogix","href":"/integrations/coralogix"},{"title":"Search Company Knowledge in Onyx From Agents","sidebarTitle":"Onyx","href":"/integrations/onyx"},{"title":"Scoped Cloudflare API Tokens for AI Agents","sidebarTitle":"Cloudflare","href":"/integrations/cloudflare"},{"title":"Set Up One Google OAuth Client for All Google Apps","sidebarTitle":"Google (setup)","href":"/integrations/google"},{"title":"Let AI Agents Search, Draft, and Send Gmail","sidebarTitle":"Gmail","href":"/integrations/gmail"},{"title":"Let AI Agents Schedule Meetings in Google Calendar","sidebarTitle":"Google Calendar","href":"/integrations/google-calendar"},{"title":"Give AI Agents Access to Google Drive Files","sidebarTitle":"Google Drive","href":"/integrations/google-drive"},{"title":"Let AI Agents Draft and Edit Google Docs","sidebarTitle":"Google Docs","href":"/integrations/google-docs"},{"title":"Let AI Agents Read and Update Google Sheets","sidebarTitle":"Google Sheets","href":"/integrations/google-sheets"},{"title":"Generate Google Slides Decks With AI Agents","sidebarTitle":"Google Slides","href":"/integrations/google-slides"},{"title":"Build Google Forms and Read Responses With Agents","sidebarTitle":"Google Forms","href":"/integrations/google-forms"},{"title":"Create Google Meet Links From AI Agents","sidebarTitle":"Google Meet","description":"Let scheduling agents create Google Meet links, list upcoming calls, and read recording metadata. The gateway injects OAuth tokens on every request.","href":"/integrations/google-meet"},{"title":"Search and Organize Google Photos With AI Agents","sidebarTitle":"Google Photos","href":"/integrations/google-photos"},{"title":"Track To-Dos in Google Tasks From AI Agents","sidebarTitle":"Google Tasks","description":"Let agents create, complete, and organize tasks and task lists in Google Tasks, with OAuth tokens injected by the gateway so agents never handle them.","href":"/integrations/google-tasks"},{"title":"Automate Google Workspace User Admin With Agents","sidebarTitle":"Google Admin","href":"/integrations/google-admin"},{"title":"Pull GA4 Reports Into AI Agents","sidebarTitle":"Google Analytics","href":"/integrations/google-analytics"},{"title":"Let AI Agents Check Indexing in Search Console","sidebarTitle":"Google Search Console","href":"/integrations/google-search-console"},{"title":"Automate Google Classroom Coursework With Agents","sidebarTitle":"Google Classroom","href":"/integrations/google-classroom"},{"title":"Manage YouTube Playlists and Analytics With Agents","sidebarTitle":"YouTube","href":"/integrations/youtube"},{"title":"Let AI Agents Search and Update Notion Pages","sidebarTitle":"Notion","href":"/integrations/notion"},{"title":"Let AI Agents Create and Triage Jira Issues","sidebarTitle":"Jira","href":"/integrations/jira"},{"title":"Give AI Agents Search and Edit Access to Confluence","sidebarTitle":"Confluence","href":"/integrations/confluence"},{"title":"Let AI Agents Manage Your Todoist Tasks","sidebarTitle":"Todoist","href":"/integrations/todoist"},{"title":"Give AI Agents Safe Access to Your Dropbox Files","sidebarTitle":"Dropbox","href":"/integrations/dropbox"},{"title":"Deploy to Fly.io From an Agent Without Exposing Tokens","sidebarTitle":"Fly.io","href":"/integrations/flyio"},{"title":"Let AI Agents Post to LinkedIn on Your Behalf","sidebarTitle":"LinkedIn","href":"/integrations/linkedin"},{"title":"Connect AI Agents to Monday.com Boards","sidebarTitle":"Monday.com","href":"/integrations/monday"},{"title":"Administer MongoDB Atlas Clusters With Agents","sidebarTitle":"MongoDB Atlas","href":"/integrations/mongodb-atlas"},{"title":"Sync Navan Bookings and Expenses With AI Agents","sidebarTitle":"Navan","href":"/integrations/navan"},{"title":"Let AI Agents Send Email With Resend","sidebarTitle":"Resend","href":"/integrations/resend"},{"title":"Send SMS and WhatsApp From AI Agents With Twilio","sidebarTitle":"Twilio","href":"/integrations/twilio"},{"title":"Zendesk Integration: Tickets and Help Center","sidebarTitle":"Zendesk","href":"/integrations/zendesk"},{"title":"Manage Supabase Projects With AI Agents","sidebarTitle":"Supabase","href":"/integrations/supabase"},{"title":"Call Claude and Gemini on Vertex AI From Agents","sidebarTitle":"Vertex AI","href":"/integrations/vertex-ai"},{"title":"Let AI Agents Edit Webflow CMS and Publish Sites","sidebarTitle":"Webflow","href":"/integrations/webflow"},{"title":"Let AI Agents Schedule Zoom Meetings and Get Recordings","sidebarTitle":"Zoom","href":"/integrations/zoom"},{"title":"Give Agents AWS Access With an IAM Role, Not Keys","sidebarTitle":"AWS Role","href":"/integrations/aws-role"},{"title":"Bitbucket Repos, Pull Requests, and Pipelines","sidebarTitle":"Bitbucket","href":"/integrations/bitbucket"},{"title":"Manage Docker Hub Repositories From AI Agents","sidebarTitle":"Docker Hub","href":"/integrations/docker"},{"title":"Read Fathom Meeting Summaries From AI Agents","sidebarTitle":"Fathom","href":"/integrations/fathom"},{"title":"Give AI Agents Access to Fireflies Transcripts","sidebarTitle":"Fireflies","href":"/integrations/fireflies"},{"title":"Let AI Agents Work With GitLab Merge Requests","sidebarTitle":"GitLab","href":"/integrations/gitlab"},{"title":"Send Google Chat Messages From AI Agents","sidebarTitle":"Google Chat","href":"/integrations/google-chat"},{"title":"Let AI Agents Look Up and Update Google Contacts","sidebarTitle":"Google Contacts","href":"/integrations/google-contacts"},{"title":"Let AI Agents Read Your Granola Meeting Notes","sidebarTitle":"Granola","href":"/integrations/granola"},{"title":"Route Agent Package Installs Through JFrog","sidebarTitle":"JFrog Artifactory","href":"/integrations/jfrog-artifactory"},{"title":"Let AI Agents File and Update Linear Issues","sidebarTitle":"Linear","href":"/integrations/linear"},{"title":"Run Snowflake SQL From an Agent, Token Hidden","sidebarTitle":"Snowflake","href":"/integrations/snowflake"},{"title":"Use a Restricted Stripe Key With AI Agents","sidebarTitle":"Stripe","href":"/integrations/stripe"},{"title":"Let AI Agents Manage Trello Boards and Cards","sidebarTitle":"Trello","href":"/integrations/trello"},{"title":"Let AI Agents Deploy and Manage Vercel Projects","sidebarTitle":"Vercel","href":"/integrations/vercel"},{"title":"Let AI Agents Post and Read on X (Twitter)","sidebarTitle":"X","href":"/integrations/x"},{"title":"Let AI Agents Work Zoho CRM Leads and Deals","sidebarTitle":"Zoho CRM","href":"/integrations/zoho-crm"},{"title":"Let AI Agents Draft Word Docs in OneDrive","sidebarTitle":"Microsoft Word","href":"/integrations/microsoft-word"}]},{"group":"LLMs","pages":[{"title":"Connect Claude to Agents With a Token or API Key","sidebarTitle":"Anthropic","href":"/integrations/anthropic"},{"title":"Use OpenAI API Keys and Codex OAuth With AI Agents","sidebarTitle":"OpenAI","href":"/integrations/openai"}]},{"group":"External Vaults","pages":[{"title":"Bitwarden Vault: Sync Secrets to the Gateway","sidebarTitle":"Bitwarden","href":"/vaults/bitwarden"},{"title":"1Password Vault: Service Account Integration","sidebarTitle":"1Password","href":"/vaults/1password"}]}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference"}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/sdks"}]}]},"basePath":"","title":"Search and Organize Google Photos With AI Agents - OneCLI","buildId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","deploymentId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-BDAj7nBh.js","DynamicMarkdown-Bq09mRwR.js","zoom-image-lightbox-CypZe82l.js","lightbox-handle-r17bVUz3.js"]}