Want your coding agent to help with Loops? Install the Loops CLI and
skills with one command:
curl -fsSL https://install.loops.so/wizard | sh
You will need a Loops API key to use the SDK.In your Loops account, go to the API Settings page and click Generate key.Copy this key and save it in your application code (for example in an environment variable).
require "loops_sdk"LoopsSdk.configure do |config| config.api_key = ENV["LOOPS_API_KEY"]end
Then call SDK methods in your application:
begin response = LoopsSdk::Contacts.create( email: "test@example.com", properties: { firstName: "John" } )rescue LoopsSdk::APIError => e puts "Loops API Error: #{e.json['message']} (Status: #{e.statusCode})"end
See the SDK docs for every method, rate limiting, and error handling.See the API documentation to learn more about rate limiting and error handling.
RubyGems
View the gem on RubyGems.
GitHub
View the documentation and source code.
Loops API
Read the Loops API reference.
Last modified on June 23, 2026
Was this page helpful?
⌘I
{"docsConfig":{"theme":"almond","$schema":"https://mintlify.com/docs.json","name":"Loops","description":"Documentation for Loops, the email platform for software companies.","colors":{"primary":"#FC5200","light":"#FC7432","dark":"#DD4800"},"logo":{"light":"https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/logo/light.png?fit=max\u0026auto=format\u0026n=1DdZd7QTRR4Srm-l\u0026q=85\u0026s=af97da0e1eae22a2d70b0e1cae7f0df3","dark":"https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/logo/dark.png?fit=max\u0026auto=format\u0026n=1DdZd7QTRR4Srm-l\u0026q=85\u0026s=72d4e8cd5151301936b7ae8ea69be757"},"favicon":"https://mintcdn.com/loops/Vqx-auiVy74YQr9S/favicon.png?fit=max\u0026auto=format\u0026n=Vqx-auiVy74YQr9S\u0026q=85\u0026s=dbe3e951e74a150874408aee1934e3cf","api":{"playground":{"display":"simple"},"mdx":{"auth":{"method":"bearer"},"server":"https://app.loops.so/api"}},"navbar":{"links":[{"href":"https://app.loops.so/settings?page=support","label":"Contact Us"},{"href":"https://app.loops.so/","label":"Log in"},{"href":"https://loops.so","label":"Loops"}]},"footer":{"socials":{"x":"https://twitter.com/loops","linkedin":"https://www.linkedin.com/company/sendwithloops"}},"seo":{"indexing":"navigable"},"fonts":{"family":"Inter"},"styling":{"codeblocks":"dark","latex":false},"integrations":{"koala":{"publicApiKey":"pk_f2087cde372aa191b0b276a5518bd869acc7"},"amplitude":{"apiKey":"512a2f0d1f22b5c69615cec59d377029"},"ga4":{"measurementId":"G-JSTF27DRRN"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"loops","hasAudioNarration":false,"actualSubdomain":"loops","customDomains":["loops.so"],"gitSource":{"type":"github","owner":"loops-so","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae895096e6e556c3ab77b59","collectionId":"02ae2212-2e40-4ebb-ae0f-5d04097973aa","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae895096e6e556c3ab77b59"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae895096e6e556c3ab77b59","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Learn","count":98},{"language":"default","tag":"API","count":87},{"language":"default","tag":"API Reference","count":72},{"language":"default","tag":"Guides","count":40},{"language":"default","tag":"Integrations","count":32},{"language":"default","tag":"Editing emails","count":25},{"language":"default","tag":"Contacts","count":18},{"language":"default","tag":"CLI","count":18},{"language":"default","tag":"Deliverability","count":18},{"language":"default","tag":"Workflows","count":12}]},"assistantConfig":{"deflection":{"enabled":true,"email":"support@loops.so","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":".callout code:not(pre code){background-color:rgba(0,0,0,.06);border-color:rgba(0,0,0,.08)}.dark .callout code:not(pre code){background-color:rgba(255,255,255,.09);border-color:rgba(255,255,255,.12)}"}],"page":{"pagePath":"sdks/ruby","slug":"/sdks/ruby","pageMetadata":{"title":"Ruby SDK","sidebarTitle":"Ruby","icon":"gem","description":"The official Loops SDK for Ruby.","href":"/sdks/ruby"},"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: \"The official Loops SDK for Ruby.\"\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`,code:`code`,img:`img`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,Tip}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:_jsx(_components.a,{href:`https://rubygems.org/gems/loops_sdk`,children:_jsx(_components.img,{src:`https://img.shields.io/gem/dt/loops_sdk?style=social`,alt:`Gem Total Downloads`})})}),`\n`,_jsx(Heading,{level:`2`,id:`installation`,children:`Installation`}),`\n`,_jsx(_components.p,{children:`Add the gem to your Gemfile:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`bundle`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` add`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` loops_sdk`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Or install it directly:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`gem`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` loops_sdk`})]}),`\n`]})})}),`\n`,_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`Want your coding agent to help with Loops? Install the Loops CLI and\n`,_jsx(_components.a,{href:`/skills`,children:`skills`}),` with one command:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` -fsSL`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` https://install.loops.so/wizard`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` | `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`sh`})]}),`\n`]})})})]}),`\n`,_jsx(_components.p,{children:`You will need a Loops API key to use the SDK.`}),`\n`,_jsxs(_components.p,{children:[`In your Loops account, go to the `,_jsx(_components.a,{href:`https://app.loops.so/settings?page=api`,children:`API Settings page`}),` and click `,_jsx(_components.strong,{children:`Generate key`}),`.`]}),`\n`,_jsx(_components.p,{children:`Copy this key and save it in your application code (for example in an environment variable).`}),`\n`,_jsx(Heading,{level:`2`,id:`usage`,children:`Usage`}),`\n`,_jsx(_components.p,{children:`Configure the SDK in an initializer:`}),`\n`,_jsx(CodeBlock,{filename:`config/initializers/loops.rb`,numberOfLines:`5`,language:`ruby`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`ruby`,children:_jsxs(_components.code,{language:`ruby`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`require`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"loops_sdk\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`LoopsSdk`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` do`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`config`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`|`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` config.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`api_key`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:`ENV`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"LOOPS_API_KEY\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`end`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Then call SDK methods in your application:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`ruby`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`ruby`,children:_jsxs(_components.code,{language:`ruby`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`begin`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` response`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`LoopsSdk::Contacts`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`create`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` email:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"test@example.com\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` properties:`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`firstName:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"John\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`rescue`}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:` LoopsSdk::`}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:`APIError`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` => e`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` puts`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"Loops API Error: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`#{`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`e.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`json`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'message'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` (Status: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`#{`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`e.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`statusCode`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`)\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`end`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`https://github.com/loops-so/loops-rb`,children:`SDK docs`}),` for every method, rate limiting, and error handling.`]}),`\n`,_jsxs(_components.p,{children:[`See the API documentation to learn more about `,_jsx(_components.a,{href:`/api-reference/intro#rate-limiting`,children:`rate limiting`}),` and `,_jsx(_components.a,{href:`/api-reference/intro#debugging`,children:`error handling`}),`.`]}),`\n`,_jsxs(CardGroup,{children:[_jsx(Card,{title:`RubyGems`,icon:`gem`,href:`https://rubygems.org/gems/loops_sdk`,children:_jsx(_components.p,{children:`View the gem on RubyGems.`})}),_jsx(Card,{title:`GitHub`,icon:`github`,href:`https://github.com/loops-so/loops-rb`,children:_jsx(_components.p,{children:`View the documentation and source code.`})}),_jsx(Card,{title:`Loops API`,icon:`rectangle-terminal`,href:`/api-reference/intro`,children:_jsx(_components.p,{children:`Read the Loops API reference.`})})]})]})}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":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Ruby SDK","sidebarTitle":"Ruby","icon":"gem","description":"The official Loops SDK for Ruby.","href":"/sdks/ruby"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Installation","slug":"installation","depth":2,"children":[]},{"title":"Usage","slug":"usage","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/loops/9f23b55700f99bdb/script.js"],"subdomain":"loops","siteName":"Loops","title":"Ruby SDK - Loops","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-25T20:18:45.726Z","gitLastModified":"2026-06-23T08:02:31.000Z","originalFileLocation":"sdks/ruby.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=\"system\"}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=\"The official Loops SDK for Ruby.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Loops\">\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/loops/oQA_4tr5jYF-tv7z/_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/loops/oQA_4tr5jYF-tv7z/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_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/loops/oQA_4tr5jYF-tv7z/_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/loops/oQA_4tr5jYF-tv7z/_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/loops/oQA_4tr5jYF-tv7z/_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/loops/oQA_4tr5jYF-tv7z/_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/loops/oQA_4tr5jYF-tv7z/_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/loops/oQA_4tr5jYF-tv7z/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Ruby SDK - Loops\">\u003cmeta data-mint-head property=\"og:description\" content=\"The official Loops SDK for Ruby.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Loops\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://loops.so/docs/sdks/ruby\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://loops.mintlify.app/_mintlify/api/og/v2?division=SDKs\u0026amp;title=Ruby+SDK\u0026amp;description=The+official+Loops+SDK+for+Ruby.\u0026amp;theme=4d99034fa43c3fda37d2eb26\u0026amp;signature=3ad3abdef15c5d31fd2eeac8d2133cc8b9c2045155a40c8c7c1202358f7bef9c\">\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=\"Ruby SDK - Loops\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The official Loops SDK for Ruby.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://loops.mintlify.app/_mintlify/api/og/v2?division=SDKs\u0026amp;title=Ruby+SDK\u0026amp;description=The+official+Loops+SDK+for+Ruby.\u0026amp;theme=4d99034fa43c3fda37d2eb26\u0026amp;signature=3ad3abdef15c5d31fd2eeac8d2133cc8b9c2045155a40c8c7c1202358f7bef9c\">\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/loops/oQA_4tr5jYF-tv7z/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Loops\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FC5200\">\u003clink data-mint-head rel=\"canonical\" href=\"https://loops.so/docs/sdks/ruby\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/sdks/ruby.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://loops.so/#organization\",\"name\":\"Loops\",\"url\":\"https://loops.so\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/logo/light.png?fit=max\u0026auto=format\u0026n=1DdZd7QTRR4Srm-l\u0026q=85\u0026s=af97da0e1eae22a2d70b0e1cae7f0df3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://loops.so/docs#website\",\"name\":\"Loops\",\"url\":\"https://loops.so/docs\",\"publisher\":{\"@id\":\"https://loops.so/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://loops.so/docs/sdks/ruby#webpage\",\"url\":\"https://loops.so/docs/sdks/ruby\",\"name\":\"Ruby SDK\",\"description\":\"The official Loops SDK for Ruby.\",\"dateModified\":\"2026-06-23T08:02:31.000Z\",\"isPartOf\":{\"@id\":\"https://loops.so/docs#website\"},\"breadcrumb\":{\"@id\":\"https://loops.so/docs/sdks/ruby#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://loops.so/docs/sdks/ruby#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API\",\"item\":\"https://loops.so/docs/api-reference/intro\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SDKs\",\"item\":\"https://loops.so/docs/sdks\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ruby SDK\",\"item\":\"https://loops.so/docs/sdks/ruby\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://loops.so/docs/sdks/ruby#article\",\"headline\":\"Ruby SDK\",\"name\":\"Ruby SDK\",\"description\":\"The official Loops SDK for Ruby.\",\"url\":\"https://loops.so/docs/sdks/ruby\",\"mainEntityOfPage\":{\"@id\":\"https://loops.so/docs/sdks/ruby#webpage\"},\"dateModified\":\"2026-06-23T08:02:31.000Z\",\"publisher\":{\"@id\":\"https://loops.so/#organization\"},\"isPartOf\":{\"@id\":\"https://loops.so/docs#website\"}}]}\u003c/script>","siteName":"Loops","nav":{"global":null,"groups":[{"group":"Learn","pages":[{"group":"Get started","pages":[{"title":"Quickstart","sidebarTitle":"Human quickstart","icon":"user","href":"/quickstart"},{"title":"Quickstart for agents","sidebarTitle":"Agent quickstart","icon":"robot","href":"/quickstart-agents"},{"title":"Setting up your domain","icon":"globe","href":"/sending-domain"},{"title":"Types of emails","icon":"envelopes-bulk","href":"/types-of-emails"},{"title":"Sending your first email","icon":"mailbox","href":"/sending-first-email"}]},{"group":"Editing emails","pages":[{"title":"The editor","icon":"keyboard","href":"/creating-emails/editor"},{"title":"LMX","icon":"square-code","href":"/creating-emails/lmx"},{"group":"Adding content","icon":"square-plus","pages":[{"title":"Images","icon":"image","href":"/creating-emails/editor/images"},{"title":"Videos","icon":"video","href":"/creating-emails/editor/videos"},{"title":"Links","icon":"link","href":"/creating-emails/editor/links"},{"title":"Buttons","icon":"rectangle-minus","href":"/creating-emails/editor/buttons"},{"title":"Social icons","icon":"star","href":"/creating-emails/editor/social-icons"},{"title":"Dividers","icon":"minus","href":"/creating-emails/editor/dividers"},{"title":"Columns","icon":"columns","href":"/creating-emails/editor/columns"},{"title":"Sections","icon":"rectangle-list","href":"/creating-emails/editor/sections"},{"title":"Arrays","icon":"bars","href":"/creating-emails/editor/arrays"},{"title":"Markdown","icon":"markdown","href":"/creating-emails/editor/markdown"},{"title":"Code blocks","icon":"code","href":"/creating-emails/editor/code-blocks"}]},{"title":"Components","icon":"shapes","href":"/creating-emails/components"},{"title":"Styling emails","icon":"palette","href":"/creating-emails/styles"},{"title":"Personalizing emails","icon":"crystal-ball","href":"/creating-emails/personalizing-emails"},{"title":"Guardian","icon":"badge-check","href":"/creating-emails/guardian"},{"title":"Uploading a custom email","icon":"arrow-up-from-bracket","sidebarTitle":"Upload a custom email","href":"/creating-emails/uploading-custom-email"},{"title":"Sending settings","icon":"pen-field","href":"/creating-emails/sending-settings"},{"title":"Critical notices","icon":"triangle-exclamation","href":"/creating-emails/critical-notices"},{"title":"Duplicating emails","icon":"copy","href":"/creating-emails/duplicating-emails"},{"title":"Font support","icon":"fonticons","href":"/creating-emails/font-support"},{"title":"Translating emails","icon":"globe","href":"/creating-emails/translating-emails-with-ai"},{"title":"Using templates","icon":"table-layout","href":"/creating-emails/using-templates"},{"title":"Delete emails","icon":"trash","href":"/creating-emails/deleting-emails"}]},{"group":"Workflows","pages":[{"title":"Workflows","sidebarTitle":"Guide","icon":"arrows-rotate","href":"/workflows"},{"title":"Triggering workflows","icon":"circle-play","href":"/workflows/triggers"},{"title":"Pausing workflows","icon":"pause","href":"/workflows/pausing"},{"title":"Branching workflows","icon":"code-branch","href":"/workflows/branching"},{"title":"Experiments","icon":"vial","href":"/workflows/experiments"}]},{"group":"Events","pages":[{"title":"Events: trigger automated emails with Loops","sidebarTitle":"Guide","icon":"bolt","href":"/events"},{"title":"Event properties","icon":"book-sparkles","href":"/events/properties"}]},{"group":"Goals","pages":[{"title":"Overview","href":"/goals/overview"},{"title":"Building your first goal","href":"/goals/building"},{"title":"Understanding metrics","href":"/goals/metrics"}]},{"group":"Contacts","pages":[{"group":"Add contacts","icon":"user-plus","pages":[{"title":"CSV Upload","href":"/add-users/csv-upload"},{"title":"Add contacts via integrations","sidebarTitle":"Integrations","href":"/add-users/integrations"},{"title":"Add and update contacts with the Loops API","sidebarTitle":"API","href":"/add-users/loops-api"}]},{"title":"Double opt-in","icon":"shield-check","href":"/contacts/double-opt-in"},{"title":"List management","icon":"list","href":"/contacts/mailing-lists"},{"title":"Filters and Segments","icon":"filter-list","href":"/contacts/filters-segments"},{"title":"Contact properties","icon":"address-book","href":"/contacts/properties"},{"title":"Contact activity timeline","icon":"bars-staggered","href":"/contacts/contact-activity"},{"title":"Email blocklist","icon":"ban","href":"/contacts/email-blocklist"},{"title":"Contact suppression","icon":"circle-xmark","href":"/contacts/suppression"},{"title":"Delete contacts","icon":"user-minus","href":"/contacts/delete-contacts"},{"title":"Export contacts","icon":"file-export","href":"/contacts/export-contacts"}]},{"group":"Transactional email","pages":[{"title":"Transactional email","sidebarTitle":"Guide","icon":"envelope","href":"/transactional"},{"title":"Attachments","icon":"paperclip","href":"/transactional/attachments"}]},{"group":"Integrations","pages":[{"title":"Integrations","sidebarTitle":"Overview","icon":"arrows-turn-right","href":"/integrations"},{"group":"Forms","icon":"table-list","pages":[{"title":"Simple form","href":"/forms/simple-form"},{"title":"Custom form","href":"/forms/custom-form"}]},{"title":"Incoming webhooks","icon":"webhook","href":"/integrations/incoming-webhooks"},{"title":"Auto BCC","icon":"eye-slash","href":"/integrations/auto-bcc"},{"title":"Attio","href":"/integrations/attio"},{"title":"Auth0 integration","sidebarTitle":"Auth0","href":"/integrations/auth0"},{"title":"Auth.js","href":"/integrations/authjs"},{"title":"Better Auth","href":"/integrations/better-auth"},{"title":"Bubble integration","sidebarTitle":"Bubble","href":"/integrations/bubble"},{"title":"Carrd integration","sidebarTitle":"Carrd","href":"/integrations/carrd"},{"title":"Clay integration","sidebarTitle":"Clay","href":"/integrations/clay"},{"title":"Clerk integration","sidebarTitle":"Clerk","href":"/integrations/clerk"},{"title":"Fivetran integration","sidebarTitle":"Fivetran","href":"/integrations/fivetran"},{"title":"Framer integration","sidebarTitle":"Framer","href":"/integrations/framer"},{"title":"Integrately","href":"/integrations/integrately"},{"title":"Novu integration","sidebarTitle":"Novu","href":"/integrations/novu"},{"title":"Make integration","sidebarTitle":"Make","href":"/integrations/make"},{"title":"Polar","href":"/integrations/polar"},{"title":"PostHog","href":"/integrations/posthog"},{"title":"RudderStack","href":"/integrations/rudderstack"},{"title":"Segment","href":"/integrations/segment"},{"title":"Stripe integration","sidebarTitle":"Stripe","href":"/integrations/stripe"},{"group":"Supabase","pages":[{"title":"Supabase","sidebarTitle":"Overview","href":"/integrations/supabase"},{"title":"Supabase - Sync contacts","sidebarTitle":"Sync contacts","href":"/integrations/supabase/contact-sync"},{"title":"Supabase - Send emails","sidebarTitle":"Send emails","href":"/integrations/supabase/send-email"}]},{"title":"Webflow integration","sidebarTitle":"Webflow","href":"/integrations/webflow"},{"title":"Zapier integration","sidebarTitle":"Zapier","href":"/integrations/zapier"}]},{"group":"SMTP","pages":[{"title":"Send with SMTP","sidebarTitle":"Overview","icon":"envelopes","href":"/smtp"},{"title":"Django SMTP","sidebarTitle":"Django","icon":"python","href":"/smtp/django"},{"title":"Laravel","icon":"laravel","href":"/smtp/laravel"},{"title":"Ruby on Rails","icon":"gem","href":"/smtp/rails"},{"title":"Supabase SMTP","sidebarTitle":"Supabase","icon":"bolt","href":"/smtp/supabase"}]},{"group":"Account","pages":[{"title":"Change your login email","icon":"user-gear","href":"/account/changing-your-email"},{"title":"Team members","icon":"users","href":"/account/team-members"},{"title":"Team switcher","icon":"arrow-up-arrow-down","href":"/account/team-switcher"},{"title":"Billing","icon":"file-invoice-dollar","href":"/account/billing"},{"title":"Group billing","icon":"layer-group","href":"/account/group-billing"},{"title":"Notifications","icon":"bell","href":"/account/notifications"},{"title":"Delete your account","icon":"user-xmark","href":"/account/delete-account"}]},{"title":"Agent skills for Loops","sidebarTitle":"Agent skills","href":"/skills"},{"title":"Loops MCP server","sidebarTitle":"MCP","href":"/mcp-server"},{"title":"Security and Vulnerability Reporting","sidebarTitle":"Security","href":"/security-reporting"},{"title":"Security and Compliance","sidebarTitle":"Compliance","href":"/security-compliance"}]},{"group":"API","pages":[{"title":"API Introduction","href":"/api-reference/intro"},{"group":"API Reference","pages":[{"group":"API key","pages":[{"title":"API key","deprecated":null,"version":null,"sidebarTitle":"Api key","openapi":"https://app.loops.so/openapi.json get /v1/api-key","href":"/api-reference/api-key"}]},{"group":"Audience segments","pages":[{"title":"Get an audience segment","deprecated":null,"version":null,"sidebarTitle":"Get a segment","openapi":"https://app.loops.so/openapi.json get /v1/audience-segments/{audienceSegmentId}","href":"/api-reference/get-audience-segment"},{"title":"List audience segments","deprecated":null,"version":null,"sidebarTitle":"List segments","openapi":"https://app.loops.so/openapi.json get /v1/audience-segments","href":"/api-reference/list-audience-segments"},{"title":"Create an audience segment","deprecated":null,"version":null,"sidebarTitle":"Create a segment","openapi":"https://app.loops.so/openapi.json post /v1/audience-segments","href":"/api-reference/create-audience-segment"}]},{"group":"Campaigns","pages":[{"title":"List campaigns","deprecated":null,"version":null,"sidebarTitle":"List campaigns","openapi":"https://app.loops.so/openapi.json get /v1/campaigns","href":"/api-reference/list-campaigns"},{"title":"Create a campaign","deprecated":null,"version":null,"sidebarTitle":"Create campaign","openapi":"https://app.loops.so/openapi.json post /v1/campaigns","href":"/api-reference/create-campaign"},{"title":"Get a campaign","deprecated":null,"version":null,"sidebarTitle":"Get campaign","openapi":"https://app.loops.so/openapi.json get /v1/campaigns/{campaignId}","href":"/api-reference/get-campaign"},{"title":"Update a campaign","deprecated":null,"version":null,"sidebarTitle":"Update campaign","openapi":"https://app.loops.so/openapi.json post /v1/campaigns/{campaignId}","href":"/api-reference/update-campaign"},{"title":"Get campaign metrics","deprecated":null,"version":null,"sidebarTitle":"Get metrics","openapi":"https://app.loops.so/openapi.json get /v1/campaigns/{campaignId}/metrics","href":"/api-reference/get-campaign-metrics"}]},{"group":"Campaign groups","pages":[{"title":"List campaign groups","deprecated":null,"version":null,"sidebarTitle":"List groups","openapi":"https://app.loops.so/openapi.json get /v1/campaign-groups","href":"/api-reference/list-campaign-groups"},{"title":"Create a campaign group","deprecated":null,"version":null,"sidebarTitle":"Create a group","openapi":"https://app.loops.so/openapi.json post /v1/campaign-groups","href":"/api-reference/create-campaign-group"},{"title":"Get a campaign group","deprecated":null,"version":null,"sidebarTitle":"Get a group","openapi":"https://app.loops.so/openapi.json get /v1/campaign-groups/{campaignGroupId}","href":"/api-reference/get-campaign-group"},{"title":"Update a campaign group","deprecated":null,"version":null,"sidebarTitle":"Update a group","openapi":"https://app.loops.so/openapi.json post /v1/campaign-groups/{campaignGroupId}","href":"/api-reference/update-campaign-group"}]},{"group":"Configuration","pages":[{"title":"List dedicated sending IP addresses","deprecated":null,"version":null,"sidebarTitle":"List sending IPs","openapi":"https://app.loops.so/openapi.json get /v1/dedicated-sending-ips","href":"/api-reference/dedicated-sending-ips"}]},{"group":"Contacts","pages":[{"title":"Create a contact","deprecated":null,"version":null,"sidebarTitle":"Create contact","openapi":"https://app.loops.so/openapi.json post /v1/contacts/create","href":"/api-reference/create-contact"},{"title":"Update a contact","deprecated":null,"version":null,"sidebarTitle":"Update a contact","openapi":"https://app.loops.so/openapi.json put /v1/contacts/update","href":"/api-reference/update-contact"},{"title":"Find a contact","deprecated":null,"version":null,"sidebarTitle":"Find contact","openapi":"https://app.loops.so/openapi.json get /v1/contacts/find","href":"/api-reference/find-contact"},{"title":"Delete a contact","deprecated":null,"version":null,"sidebarTitle":"Delete a contact","openapi":"https://app.loops.so/openapi.json post /v1/contacts/delete","href":"/api-reference/delete-contact"},{"title":"Check contact suppression status","deprecated":null,"version":null,"sidebarTitle":"Check suppression","openapi":"https://app.loops.so/openapi.json get /v1/contacts/suppression","href":"/api-reference/check-contact-suppression"},{"title":"Remove contact from suppression","deprecated":null,"version":null,"sidebarTitle":"Remove suppression","openapi":"https://app.loops.so/openapi.json delete /v1/contacts/suppression","href":"/api-reference/remove-contact-suppression"}]},{"group":"Contact properties","pages":[{"title":"List contact properties","deprecated":null,"version":null,"sidebarTitle":"List properties","openapi":"https://app.loops.so/openapi.json get /v1/contacts/properties","href":"/api-reference/list-contact-properties"},{"title":"Create a contact property","deprecated":null,"version":null,"sidebarTitle":"Create property","openapi":"https://app.loops.so/openapi.json post /v1/contacts/properties","href":"/api-reference/create-contact-property"}]},{"group":"Components","pages":[{"title":"Get a component","deprecated":null,"version":null,"sidebarTitle":"Get component","openapi":"https://app.loops.so/openapi.json get /v1/components/{componentId}","href":"/api-reference/get-component"},{"title":"Update a component","deprecated":null,"version":null,"sidebarTitle":"Update component","openapi":"https://app.loops.so/openapi.json post /v1/components/{componentId}","href":"/api-reference/update-component"},{"title":"List components","deprecated":null,"version":null,"sidebarTitle":"List components","openapi":"https://app.loops.so/openapi.json get /v1/components","href":"/api-reference/list-components"},{"title":"Create a component","deprecated":null,"version":null,"sidebarTitle":"Create component","openapi":"https://app.loops.so/openapi.json post /v1/components","href":"/api-reference/create-component"}]},{"group":"Email messages","pages":[{"title":"Get an email message","deprecated":null,"version":null,"sidebarTitle":"Get an email","openapi":"https://app.loops.so/openapi.json get /v1/email-messages/{emailMessageId}","href":"/api-reference/get-email-message"},{"title":"Update an email message","deprecated":null,"version":null,"sidebarTitle":"Update an email","openapi":"https://app.loops.so/openapi.json post /v1/email-messages/{emailMessageId}","href":"/api-reference/update-email-message"},{"title":"Send a preview of an email message","deprecated":null,"version":null,"sidebarTitle":"Preview email","openapi":"https://app.loops.so/openapi.json post /v1/email-messages/{emailMessageId}/preview","href":"/api-reference/preview-email-message"},{"title":"Run Guardian checks on an email message","deprecated":null,"version":null,"sidebarTitle":"Guardian checks","openapi":"https://app.loops.so/openapi.json get /v1/email-messages/{emailMessageId}/guardian","href":"/api-reference/run-guardian-checks"}]},{"group":"Events","pages":[{"title":"Send an event","deprecated":null,"version":null,"sidebarTitle":"Send event","openapi":"https://app.loops.so/openapi.json post /v1/events/send","href":"/api-reference/send-event"}]},{"group":"Event patterns","pages":[{"title":"List event patterns","deprecated":null,"version":null,"sidebarTitle":"List event patterns","openapi":"https://app.loops.so/openapi.json get /v1/event-patterns","href":"/api-reference/list-event-patterns"},{"title":"Get an event pattern by name","deprecated":null,"version":null,"sidebarTitle":"Get by name","openapi":"https://app.loops.so/openapi.json get /v1/event-patterns/by-name/{eventName}","href":"/api-reference/get-event-pattern-by-name"},{"title":"Get an event pattern by ID","deprecated":null,"version":null,"sidebarTitle":"Get by ID","openapi":"https://app.loops.so/openapi.json get /v1/event-patterns/{eventPatternId}","href":"/api-reference/get-event-pattern"}]},{"group":"Mailing lists","pages":[{"title":"List mailing lists","deprecated":null,"version":null,"sidebarTitle":"List mailing lists","openapi":"https://app.loops.so/openapi.json get /v1/lists","href":"/api-reference/list-mailing-lists"}]},{"group":"Themes","pages":[{"title":"Get a theme","deprecated":null,"version":null,"sidebarTitle":"Get theme","openapi":"https://app.loops.so/openapi.json get /v1/themes/{themeId}","href":"/api-reference/get-theme"},{"title":"Update a theme","deprecated":null,"version":null,"sidebarTitle":"Update theme","openapi":"https://app.loops.so/openapi.json post /v1/themes/{themeId}","href":"/api-reference/update-theme"},{"title":"List themes","deprecated":null,"version":null,"sidebarTitle":"List themes","openapi":"https://app.loops.so/openapi.json get /v1/themes","href":"/api-reference/list-themes"},{"title":"Create a theme","deprecated":null,"version":null,"sidebarTitle":"Create theme","openapi":"https://app.loops.so/openapi.json post /v1/themes","href":"/api-reference/create-theme"}]},{"group":"Transactional emails","pages":[{"title":"List transactional emails (legacy)","deprecated":true,"version":null,"sidebarTitle":"List transactionals (legacy)","openapi":"https://app.loops.so/openapi.json get /v1/transactional","href":"/api-reference/list-transactional-emails-v1"},{"title":"Send a transactional email","deprecated":null,"version":null,"sidebarTitle":"Send transactional","openapi":"https://app.loops.so/openapi.json post /v1/transactional","href":"/api-reference/send-transactional-email"},{"title":"List transactional emails","deprecated":null,"version":null,"sidebarTitle":"List transactionals","openapi":"https://app.loops.so/openapi.json get /v1/transactional-emails","href":"/api-reference/list-transactional-emails"},{"title":"Create a transactional email","deprecated":null,"version":null,"sidebarTitle":"Create transactional","openapi":"https://app.loops.so/openapi.json post /v1/transactional-emails","href":"/api-reference/create-transactional-email"},{"title":"Get a transactional email","deprecated":null,"version":null,"sidebarTitle":"Get transactional","openapi":"https://app.loops.so/openapi.json get /v1/transactional-emails/{transactionalId}","href":"/api-reference/get-transactional-email"},{"title":"Update a transactional email","deprecated":null,"version":null,"sidebarTitle":"Update transactional","openapi":"https://app.loops.so/openapi.json post /v1/transactional-emails/{transactionalId}","href":"/api-reference/update-transactional-email"},{"title":"Get transactional email metrics","deprecated":null,"version":null,"sidebarTitle":"Get metrics","openapi":"https://app.loops.so/openapi.json get /v1/transactional-emails/{transactionalId}/metrics","href":"/api-reference/get-transactional-email-metrics"},{"title":"Ensure a transactional email has a draft","deprecated":null,"version":null,"sidebarTitle":"Ensure draft","openapi":"https://app.loops.so/openapi.json post /v1/transactional-emails/{transactionalId}/draft","href":"/api-reference/ensure-transactional-draft"},{"title":"Publish a transactional email","deprecated":null,"version":null,"sidebarTitle":"Publish transactional","openapi":"https://app.loops.so/openapi.json post /v1/transactional-emails/{transactionalId}/publish","href":"/api-reference/publish-transactional-email"}]},{"group":"Transactional groups","pages":[{"title":"List transactional groups","deprecated":null,"version":null,"sidebarTitle":"List groups","openapi":"https://app.loops.so/openapi.json get /v1/transactional-groups","href":"/api-reference/list-transactional-groups"},{"title":"Create a transactional group","deprecated":null,"version":null,"sidebarTitle":"Create a group","openapi":"https://app.loops.so/openapi.json post /v1/transactional-groups","href":"/api-reference/create-transactional-group"},{"title":"Get a transactional group","deprecated":null,"version":null,"sidebarTitle":"Get a group","openapi":"https://app.loops.so/openapi.json get /v1/transactional-groups/{transactionalGroupId}","href":"/api-reference/get-transactional-group"},{"title":"Update a transactional group","deprecated":null,"version":null,"sidebarTitle":"Update a group","openapi":"https://app.loops.so/openapi.json post /v1/transactional-groups/{transactionalGroupId}","href":"/api-reference/update-transactional-group"}]},{"group":"Uploads","pages":[{"title":"Create an upload","deprecated":null,"version":null,"sidebarTitle":"Create an upload","openapi":"https://app.loops.so/openapi.json post /v1/uploads","href":"/api-reference/create-upload"},{"title":"Complete an upload","deprecated":null,"version":null,"sidebarTitle":"Complete upload","openapi":"https://app.loops.so/openapi.json post /v1/uploads/{emailAssetId}/complete","href":"/api-reference/complete-upload"}]},{"group":"Workflow groups","pages":[{"title":"List workflow groups","deprecated":null,"version":null,"sidebarTitle":"List groups","openapi":"https://app.loops.so/openapi.json get /v1/workflow-groups","href":"/api-reference/list-workflow-groups"},{"title":"Create a workflow group","deprecated":null,"version":null,"sidebarTitle":"Create a group","openapi":"https://app.loops.so/openapi.json post /v1/workflow-groups","href":"/api-reference/create-workflow-group"},{"title":"Get a workflow group","deprecated":null,"version":null,"sidebarTitle":"Get a group","openapi":"https://app.loops.so/openapi.json get /v1/workflow-groups/{workflowGroupId}","href":"/api-reference/get-workflow-group"},{"title":"Update a workflow group","deprecated":null,"version":null,"sidebarTitle":"Update a group","openapi":"https://app.loops.so/openapi.json post /v1/workflow-groups/{workflowGroupId}","href":"/api-reference/update-workflow-group"}]},{"group":"Workflows","pages":[{"title":"List workflows","deprecated":null,"version":null,"sidebarTitle":"List workflows","openapi":"https://app.loops.so/openapi.json get /v1/workflows","href":"/api-reference/list-workflows"},{"title":"Create a workflow","deprecated":null,"version":null,"sidebarTitle":"Create workflow","openapi":"https://app.loops.so/openapi.json post /v1/workflows","href":"/api-reference/create-workflow"},{"title":"Get a workflow","deprecated":null,"version":null,"sidebarTitle":"Get workflow","openapi":"https://app.loops.so/openapi.json get /v1/workflows/{workflowId}","href":"/api-reference/get-workflow"},{"title":"Update a workflow","deprecated":null,"version":null,"sidebarTitle":"Update workflow","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}","href":"/api-reference/update-workflow"},{"title":"Delete a workflow","deprecated":null,"version":null,"sidebarTitle":"Delete a workflow","openapi":"https://app.loops.so/openapi.json delete /v1/workflows/{workflowId}","href":"/api-reference/delete-workflow"},{"title":"Change workflow mailing list","deprecated":null,"version":null,"sidebarTitle":"Change mailing list","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/mailing-list","href":"/api-reference/change-workflow-mailing-list"}]},{"group":"Workflow nodes","pages":[{"title":"Create a workflow node","deprecated":null,"version":null,"sidebarTitle":"Create a node","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes","href":"/api-reference/create-workflow-node"},{"title":"Add a branch","deprecated":null,"version":null,"sidebarTitle":"Add a branch","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes/{nodeId}/add-branch","href":"/api-reference/add-workflow-branch"},{"title":"Get a workflow node","deprecated":null,"version":null,"sidebarTitle":"Get a node","openapi":"https://app.loops.so/openapi.json get /v1/workflows/{workflowId}/nodes/{nodeId}","href":"/api-reference/get-workflow-node"},{"title":"Update a workflow node","deprecated":null,"version":null,"sidebarTitle":"Update a node","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes/{nodeId}","href":"/api-reference/update-workflow-node"},{"title":"Delete a workflow node","deprecated":null,"version":null,"sidebarTitle":"Delete a node","openapi":"https://app.loops.so/openapi.json delete /v1/workflows/{workflowId}/nodes/{nodeId}","href":"/api-reference/delete-workflow-node"},{"title":"Get workflow node metrics","deprecated":null,"version":null,"sidebarTitle":"Get metrics","openapi":"https://app.loops.so/openapi.json get /v1/workflows/{workflowId}/nodes/{nodeId}/metrics","href":"/api-reference/get-workflow-node-metrics"},{"title":"Reroute a node connection","deprecated":null,"version":null,"sidebarTitle":"Reroute a node","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes/{nodeId}/reroute","href":"/api-reference/reroute-node-connection"},{"title":"Delete workflow nodes recursively","deprecated":null,"version":null,"sidebarTitle":"Delete nodes","openapi":"https://app.loops.so/openapi.json delete /v1/workflows/{workflowId}/nodes/{nodeId}/recursive","href":"/api-reference/delete-workflow-nodes"}]}]},{"group":"Examples","pages":[{"title":"API Examples","href":"/api-reference/examples"},{"title":"Campaigns API examples","sidebarTitle":"Campaigns","href":"/api-reference/examples/campaigns"},{"title":"Contacts API examples","sidebarTitle":"Contacts","href":"/api-reference/examples/contacts"},{"title":"Events API examples","sidebarTitle":"Events","href":"/api-reference/examples/events"},{"title":"Transactional email API examples","sidebarTitle":"Transactional emails","href":"/api-reference/examples/transactional-emails"},{"title":"Workflows API examples","sidebarTitle":"Workflows","href":"/api-reference/examples/workflows"}]},{"group":"SDKs","pages":[{"title":"Loops SDKs","sidebarTitle":"Overview","href":"/sdks"},{"title":"Go SDK","sidebarTitle":"Go","icon":"golang","href":"/sdks/go"},{"title":"JavaScript SDK","sidebarTitle":"JavaScript","icon":"js","href":"/sdks/javascript"},{"title":"Nuxt module","sidebarTitle":"Nuxt","icon":"mountains","href":"/sdks/nuxt"},{"title":"PHP SDK","sidebarTitle":"PHP","icon":"php","description":"The official Loops PHP package.","href":"/sdks/php"},{"title":"Ruby SDK","sidebarTitle":"Ruby","icon":"gem","href":"/sdks/ruby"}]},{"title":"Webhooks","description":"Learn about receiving event notifications with webhooks, including setup steps, retries, and payload examples.","href":"/webhooks"},{"title":"API Changelog","href":"/api-reference/changelog"}]},{"group":"CLI","pages":[{"title":"Loops CLI","sidebarTitle":"Overview","href":"/cli"},{"title":"Audience segments","href":"/cli/audience-segments"},{"title":"Auth","href":"/cli/auth"},{"title":"Campaign groups","href":"/cli/campaign-groups"},{"title":"Campaigns","href":"/cli/campaigns"},{"title":"Completion","href":"/cli/completion"},{"title":"Components","href":"/cli/components"},{"title":"Contact properties","href":"/cli/contact-properties"},{"title":"Contacts","href":"/cli/contacts"},{"title":"Email messages","href":"/cli/email-messages"},{"title":"Event patterns","href":"/cli/event-patterns"},{"title":"Events","href":"/cli/events"},{"title":"Lists","href":"/cli/lists"},{"title":"Themes","href":"/cli/themes"},{"title":"Transactional","href":"/cli/transactional"},{"title":"Transactional groups","href":"/cli/transactional-groups"},{"title":"Uploads","href":"/cli/uploads"},{"title":"Workflows","href":"/cli/workflows"}]},{"group":"Guides","pages":[{"title":"Guides for onboarding, deliverability, and lifecycle emails.","sidebarTitle":"All guides","href":"/guides/intro"},{"group":"Getting started","pages":[{"title":"Create and send your first campaign with the API or an agent","sidebarTitle":"First campaign via API","href":"/guides/first-campaign-api"},{"title":"Your first onboarding emails","href":"/guides/onboarding-emails"}]},{"group":"Workflows","pages":[{"title":"Retrigger a Workflow","href":"/guides/retroactively-trigger-workflow"}]},{"group":"Deliverability","pages":[{"title":"Reducing product email bounce rate","sidebarTitle":"Reducing bounce rate","href":"/deliverability/reducing-bounce-rate"},{"title":"DMARC and DKIM setup","sidebarTitle":"DMARC and DKIM","href":"/deliverability/dmarc-dkim-setup"},{"title":"DNS zone file export","sidebarTitle":"DNS zone file export","href":"/deliverability/dns-zone-file-export"},{"title":"Shortened YouTube links warning","href":"/deliverability/youtube-links-warning"},{"title":"Deliverability optimization","href":"/deliverability/optimization"},{"title":"Improve your inbox placement","href":"/deliverability/improving-inbox-placement"},{"title":"Sending to large audiences","href":"/deliverability/sending-to-large-audience"},{"title":"Sending legally mandated email","href":"/deliverability/legally-mandated-email"},{"title":"Subdomains vs root domains","href":"/deliverability/sending-from-subdomain"},{"title":"Building your sender reputation","href":"/deliverability/sending-reputation"},{"title":"Sending transactional emails to group inboxes","sidebarTitle":"Send transactional emails to group inboxes","href":"/deliverability/transactional-group-inboxes"},{"title":"Insights from Google Postmaster","href":"/deliverability/gaining-insights"},{"title":"Email open rates","href":"/deliverability/understanding-email-open-rates"},{"title":"Add a sending avatar","href":"/deliverability/adding-a-sending-avatar"},{"title":"Maintaining a clean list","href":"/deliverability/maintaining-a-clean-list"},{"title":"Sending emails to Apple “Hide my email” addresses","sidebarTitle":"Send to “Hide my email” addresses","href":"/deliverability/apple-hide-my-email"},{"title":"Sending from multiple domains","href":"/deliverability/sending-from-multiple-domains"},{"title":"Migrating domains","href":"/deliverability/migrating-domains"}]},{"group":"Integrations","pages":[{"title":"Set up Loops in Next.js","sidebarTitle":"Next.js guide","href":"/guides/nextjs"},{"title":"Send emails from Bolt.new","href":"/guides/bolt-emails"},{"title":"Bubble API Connector","href":"/guides/bubble-api-connector"},{"title":"Set up a welcome email sequence for new Ghost members","sidebarTitle":"Email sequence for Ghost","href":"/guides/ghost-email-sequence"}]},{"group":"Creating emails","pages":[{"title":"How to resend a campaign to contacts who haven't received it","sidebarTitle":"Send to new subscribers again","href":"/guides/send-again"},{"title":"Why we don't support HTML emails","href":"/guides/html-emails"},{"title":"Dark mode support in emails","href":"/guides/email-dark-mode"}]},{"group":"Recipes","pages":[{"title":"Recipe: Onboarding completion workflow","sidebarTitle":"Onboarding completion","href":"/guides/onboarding-completion"},{"title":"Recipe: Churn risk segment and re-engagement workflow","sidebarTitle":"Churn risk re-engagement","href":"/guides/churn-risk-segment"},{"title":"Recipe: Active 30-day users segment","sidebarTitle":"Active 30-day users","href":"/guides/active-30-day-users"},{"title":"Recipe: Upgrade upsell workflow","sidebarTitle":"Upgrade upsell","href":"/guides/upgrade-upsell"},{"title":"Recipe: SaaS customer lifecycle emails","sidebarTitle":"Lifecycle emails","href":"/guides/lifecycle-emails"},{"title":"Recipe: Scheduled digest email","sidebarTitle":"Scheduled digest","href":"/guides/scheduled-digest-email"},{"title":"Recipe: Product updates","sidebarTitle":"Product updates","href":"/guides/product-updates"}]},{"group":"Email basics","pages":[{"title":"What is DNS?","href":"/guides/what-is-dns"},{"title":"What is BIMI?","href":"/guides/what-is-bimi"},{"title":"Open rates are a vanity metric","href":"/guides/open-rates"},{"title":"Transactional vs marketing email","sidebarTitle":"Transactional vs marketing","href":"/guides/transactional-vs-marketing-email"}]}]}]},"basePath":"","title":"Ruby SDK - Loops","buildId":"dpl_Acry4NrQAgjcikyFgVE2eJ7XQCAv","deploymentId":"dpl_Acry4NrQAgjcikyFgVE2eJ7XQCAv","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-DBRtNxbY.js","lightbox-handle-r17bVUz3.js"]}