<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Compense Developers on Compense Docs</title><link>https://docs.compense.co/en/</link><description>Recent content in Compense Developers on Compense Docs</description><generator>Hugo</generator><language>en-US</language><atom:link href="https://docs.compense.co/en/index.xml" rel="self" type="application/rss+xml"/><item><title>Affiliates</title><link>https://docs.compense.co/en/modulos/afiliados/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/modulos/afiliados/</guid><description>&lt;p&gt;The affiliates module is the entry point for any integration: credits, subsidies, monetary
allowance and loan portfolio all resolve the affiliate &lt;strong&gt;by their document&lt;/strong&gt;, and the engine rejects
the operation if that document isn&amp;rsquo;t in your entity&amp;rsquo;s registry. Here you learn how to keep that
registry up to date from your system (core, ERP, SOFIA or a spreadsheet) and how to query it.&lt;/p&gt;</description></item><item><title>Affiliates</title><link>https://docs.compense.co/en/api-reference/affiliates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/affiliates/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/afiliados/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Authentication</title><link>https://docs.compense.co/en/conceptos/autenticacion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/conceptos/autenticacion/</guid><description>&lt;p&gt;Every request to the gateway carries &lt;strong&gt;one&lt;/strong&gt; authentication header:&lt;/p&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;HTTP&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;X-API-Key: cmp_...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There&amp;rsquo;s no OAuth, no session tokens and no tenant id in the URL: the key is &lt;strong&gt;self-identifying&lt;/strong&gt;.
The gateway looks it up, checks that it&amp;rsquo;s active and not expired, and derives from it the &lt;strong&gt;tenant&lt;/strong&gt; (your
entity), the &lt;strong&gt;scopes&lt;/strong&gt;, the &lt;strong&gt;environment&lt;/strong&gt; (&lt;code&gt;sandbox&lt;/code&gt;/&lt;code&gt;prod&lt;/code&gt;), the per-minute limit and the monthly
quota. The SDKs set the header for you on every call.&lt;/p&gt;</description></item><item><title>Disburse a credit and reconcile</title><link>https://docs.compense.co/en/recetas/desembolsar-credito-y-conciliar/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/recetas/desembolsar-credito-y-conciliar/</guid><description>&lt;p&gt;&lt;strong&gt;Caja Horizonte&lt;/strong&gt; originates payroll-deduction loans (&lt;em&gt;libranzas&lt;/em&gt;) from its ERP. The analyst
approves in the ERP, treasury orders the disbursement, and accounting needs to know, without asking
anyone, &lt;strong&gt;when&lt;/strong&gt; the money went out, &lt;strong&gt;how much&lt;/strong&gt;, and &lt;strong&gt;against which application&lt;/strong&gt;. This recipe
builds that circuit end to end with the gateway: submit → decide → disburse → receive
&lt;code&gt;credits.disbursed&lt;/code&gt; → reconcile.&lt;/p&gt;</description></item><item><title>Frequently asked questions</title><link>https://docs.compense.co/en/ayuda/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/ayuda/faq/</guid><description>&lt;h2 id="llaves-y-entornos"&gt;Keys and environments &lt;a class="heading-anchor" href="#llaves-y-entornos" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="dónde-pongo-el-id-de-mi-caja-o-de-mi-entidad"&gt;Where do I put the id of my family compensation fund (caja de compensación) or my entity? &lt;a class="heading-anchor" href="#d%c3%b3nde-pongo-el-id-de-mi-caja-o-de-mi-entidad" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nowhere. The &lt;code&gt;cmp_...&lt;/code&gt; key identifies the tenant; the gateway resolves it on its own.
Affiliates, patients or account holders are identified by their &lt;code&gt;document&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Get your API key</title><link>https://docs.compense.co/en/getting-started/llave-de-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/getting-started/llave-de-api/</guid><description>&lt;p&gt;The entire API Gateway authenticates with &lt;strong&gt;an API key&lt;/strong&gt; that your system sends in the
&lt;code&gt;X-API-Key&lt;/code&gt; header. The key &lt;strong&gt;identifies your entity&lt;/strong&gt; (the &lt;em&gt;tenant&lt;/em&gt;): you never send the id of a family compensation fund (caja de compensación) or
of an organization, and a key never sees another tenant&amp;rsquo;s data.&lt;/p&gt;</description></item><item><title>Python</title><link>https://docs.compense.co/en/sdks/python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/sdks/python/</guid><description>&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Package&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;compense-sdk-python&lt;/code&gt; (imported as &lt;code&gt;compense_gateway&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Version&lt;/td&gt;
 &lt;td&gt;1.1.0 · API v1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Requirements&lt;/td&gt;
 &lt;td&gt;Python 3.9+&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dependencies&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;httpx&lt;/code&gt; (the &lt;code&gt;models&lt;/code&gt; and &lt;code&gt;webhooks&lt;/code&gt; modules only use the standard library)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Repository&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Appiasoft/compense-saas-sdk-python"&gt;Appiasoft/compense-saas-sdk-python&lt;/a&gt; · guides in &lt;code&gt;Docs/features/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This is the reference SDK: the others compare their requests against what this one sends.&lt;/p&gt;</description></item><item><title>Subscribe an endpoint</title><link>https://docs.compense.co/en/webhooks/suscripcion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/webhooks/suscripcion/</guid><description>&lt;p&gt;An &lt;strong&gt;endpoint&lt;/strong&gt; is a URL you own that receives events. You register it with your API key, choose which
events it subscribes to, and Compense returns, &lt;strong&gt;only once&lt;/strong&gt;, the secret it will use to sign every
delivery. Everything you do here is tied to the organization that owns the key: an id from another
organization responds &lt;code&gt;404&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Test clocks</title><link>https://docs.compense.co/en/sandbox/relojes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/sandbox/relojes/</guid><description>&lt;p&gt;Some behaviors only show up as time passes: an installment that goes past due, an obligation that
comes due, a subsidy that requires a minimum membership period. Testing them by waiting real days isn&amp;rsquo;t
an option. A &lt;strong&gt;test clock&lt;/strong&gt; is a virtual time source: you freeze it on a date (&lt;code&gt;frozen_time&lt;/code&gt;) and
&lt;strong&gt;move it forward&lt;/strong&gt; as many times as you like; its &lt;code&gt;current_time&lt;/code&gt; is the &amp;ldquo;now&amp;rdquo; of your scenario.&lt;/p&gt;</description></item><item><title>Credits</title><link>https://docs.compense.co/en/modulos/creditos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/modulos/creditos/</guid><description>&lt;p&gt;The credits module exposes Compense&amp;rsquo;s &lt;strong&gt;origination engine&lt;/strong&gt; (rules, scoring and disbursement) to
your system: you submit an affiliate&amp;rsquo;s application, your analyst or the engine decides it, and you
disburse it. Every step returns a traceable &lt;code&gt;transaction_id&lt;/code&gt; and emits a webhook. What happens after
the disbursement (payment schedule, collection, payoff certificate) lives in
&lt;a href="https://docs.compense.co/en/modulos/cartera/"&gt;Loan portfolio&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Credits</title><link>https://docs.compense.co/en/api-reference/credits/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/credits/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/creditos/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Event catalog</title><link>https://docs.compense.co/en/webhooks/eventos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/webhooks/eventos/</guid><description>&lt;p&gt;Each event has a &lt;strong&gt;key&lt;/strong&gt; (&lt;code&gt;credits.decision&lt;/code&gt;, &lt;code&gt;wallets.topup.completed&lt;/code&gt;, &lt;code&gt;pqrs.responded&lt;/code&gt;…) that you
use when subscribing an endpoint and that arrives in the &lt;code&gt;X-Webhook-Event&lt;/code&gt; header and in the body&amp;rsquo;s
&lt;code&gt;event&lt;/code&gt; field. This page is a &lt;strong&gt;snapshot of the catalog as of November 1, 2026&lt;/strong&gt; (52 events). The
source of truth is the live catalog, 
&lt;a class="op-link" href="https://docs.compense.co/en/api-reference/webhooks/#getWebhookEventCatalog"&gt;&lt;span class="verb verb--get"&gt;GET&lt;/span&gt;&lt;code&gt;/v1/gateway/webhooks/event-catalog/&lt;/code&gt;&lt;/a&gt;
: if a new event shows up,
you&amp;rsquo;ll see it there first, along with its &lt;code&gt;payload_example&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Install the SDK</title><link>https://docs.compense.co/en/getting-started/instalacion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/getting-started/instalacion/</guid><description>&lt;p&gt;There&amp;rsquo;s one official SDK per language. All five cover &lt;strong&gt;all 115 operations&lt;/strong&gt; of the gateway with the
same names (adapted to each language&amp;rsquo;s conventions) and handle what every integration
ends up doing by hand: authentication, &lt;code&gt;Idempotency-Key&lt;/code&gt; on writes, retries with backoff,
typed &lt;code&gt;problem+json&lt;/code&gt; errors, pagination, deprecation warnings and webhook verification.
They&amp;rsquo;re all on version &lt;strong&gt;1.1.0&lt;/strong&gt; and target API &lt;strong&gt;v1&lt;/strong&gt; (aligned SemVer: SDK major = API
major).&lt;/p&gt;</description></item><item><title>JavaScript / TypeScript</title><link>https://docs.compense.co/en/sdks/javascript/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/sdks/javascript/</guid><description>&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Package&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;@compense/sdk&lt;/code&gt; (ESM and CommonJS, with TypeScript declarations)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Version&lt;/td&gt;
 &lt;td&gt;1.1.0 · API v1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Requirements&lt;/td&gt;
 &lt;td&gt;Node.js 18+ (uses native &lt;code&gt;fetch&lt;/code&gt;); also Deno, Bun, Cloudflare Workers and Vercel/Next.js edge&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dependencies&lt;/td&gt;
 &lt;td&gt;None at runtime&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Repository&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Appiasoft/compense-saas-sdk-js"&gt;Appiasoft/compense-saas-sdk-js&lt;/a&gt; · guides in &lt;code&gt;docs/&lt;/code&gt; · examples in &lt;code&gt;examples/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="instalar"&gt;Install &lt;a class="heading-anchor" href="#instalar" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;Shell&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install @compense/sdk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;TypeScript&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CompenseClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@compense/sdk&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ESM / TypeScript
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// const { CompenseClient } = require(&amp;#34;@compense/sdk&amp;#34;); // CommonJS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="cliente"&gt;Client &lt;a class="heading-anchor" href="#cliente" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;TypeScript&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;CompenseClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt;: &lt;span class="kt"&gt;process.env.COMPENSE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// required; sent as X-API-Key
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sandbox&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;production&amp;#34; (default) | &amp;#34;sandbox&amp;#34; | &amp;#34;dev&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;baseUrl&lt;/span&gt;: &lt;span class="kt"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// another URL; takes precedence over environment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;timeout&lt;/span&gt;: &lt;span class="kt"&gt;30_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// ms per attempt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;retry&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;maxAttempts&lt;/span&gt;: &lt;span class="kt"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;backoffBaseMs&lt;/span&gt;: &lt;span class="kt"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;backoffMaxMs&lt;/span&gt;: &lt;span class="kt"&gt;30_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;jitter&lt;/span&gt;: &lt;span class="kt"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;retryWrites&lt;/span&gt;: &lt;span class="kt"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;: &lt;span class="kt"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// your own fetch (proxy, instrumentation, tests)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;logger&lt;/span&gt;: &lt;span class="kt"&gt;console&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// deprecation warnings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There&amp;rsquo;s a single client and everything returns a &lt;code&gt;Promise&lt;/code&gt;. The key is a server secret: even though
the client works in browsers, &lt;strong&gt;never&lt;/strong&gt; put a key in frontend code.&lt;/p&gt;</description></item><item><title>Lifecycle simulators</title><link>https://docs.compense.co/en/sandbox/simuladores/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/sandbox/simuladores/</guid><description>&lt;p&gt;Your integration has to react to every state a money movement goes through: show &amp;ldquo;in progress&amp;rdquo;,
confirm when it settles, reverse if it fails, reconcile if it&amp;rsquo;s returned. The &lt;strong&gt;simulators&lt;/strong&gt; let you
walk through those states in the sandbox &lt;strong&gt;one step at a time&lt;/strong&gt; and reach every terminal state
(failures included) without waiting on any provider.&lt;/p&gt;</description></item><item><title>Monetary allowance for the period</title><link>https://docs.compense.co/en/recetas/cuota-monetaria-del-periodo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/recetas/cuota-monetaria-del-periodo/</guid><description>&lt;p&gt;Every month, &lt;strong&gt;Caja Horizonte&lt;/strong&gt; calculates the monetary allowance for its affiliates and pays it out.
A mistake here is expensive: paying thousands of affiliates twice, or leaving half of them unpaid
because the process crashed halfway through the batch. This recipe closes the &lt;strong&gt;October 2026&lt;/strong&gt; period
in a way that can be interrupted and relaunched at any point without paying twice.&lt;/p&gt;</description></item><item><title>Response envelope</title><link>https://docs.compense.co/en/conceptos/sobre-de-respuesta/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/conceptos/sobre-de-respuesta/</guid><description>&lt;p&gt;The gateway responds in one of two ways, depending on the type of operation.&lt;/p&gt;
&lt;h2 id="escrituras-el-sobre-de-transacción"&gt;Writes: the transaction envelope &lt;a class="heading-anchor" href="#escrituras-el-sobre-de-transacci%c3%b3n" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every operation that &lt;strong&gt;changes something&lt;/strong&gt; (the ones that carry an &lt;code&gt;Idempotency-Key&lt;/code&gt;) responds with the same envelope,
whatever the module:&lt;/p&gt;</description></item><item><title>Support</title><link>https://docs.compense.co/en/ayuda/soporte/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/ayuda/soporte/</guid><description>&lt;h2 id="canales"&gt;Channels &lt;a class="heading-anchor" href="#canales" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Channel&lt;/th&gt;
 &lt;th&gt;What it&amp;rsquo;s for&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="mailto:developers@compense.co"&gt;developers@compense.co&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Integration questions, API or SDK errors, keys and technical onboarding.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Your Compense account executive&lt;/td&gt;
 &lt;td&gt;Contracts, active modules, production keys and rate limits.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://docs.compense.co/en/guias/"&gt;User guides&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;How to operate the platform from the dashboard and the apps (for advisors and operators).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="qué-incluir-en-tu-mensaje"&gt;What to include in your message &lt;a class="heading-anchor" href="#qu%c3%a9-incluir-en-tu-mensaje" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The &lt;code&gt;trace_id&lt;/code&gt;&lt;/strong&gt; of the error (or the response&amp;rsquo;s &lt;code&gt;X-Request-ID&lt;/code&gt; header).&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;operation&lt;/strong&gt; (&lt;code&gt;operationId&lt;/code&gt; or method and path) and the approximate &lt;strong&gt;time&lt;/strong&gt; with time zone.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;environment&lt;/strong&gt; (sandbox, dev or production) and the &lt;strong&gt;SDK and version&lt;/strong&gt; (&lt;code&gt;compense-sdk-python 1.1.0&lt;/code&gt;…).&lt;/li&gt;
&lt;li&gt;Your &lt;code&gt;Idempotency-Key&lt;/code&gt; if it was a write.&lt;/li&gt;
&lt;li&gt;The error response body (&lt;code&gt;problem+json&lt;/code&gt;) and, if relevant, the request &lt;strong&gt;without sensitive
data&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="callout callout--danger" role="note"&gt;
 &lt;p class="callout__title"&gt;Never send&lt;/p&gt;</description></item><item><title>Your first call</title><link>https://docs.compense.co/en/getting-started/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/getting-started/quickstart/</guid><description>&lt;p&gt;You&amp;rsquo;ll be talking to the &lt;strong&gt;sandbox&lt;/strong&gt;: the gateway responds with the simulated engine, deterministically and
with no real money. You need a &lt;a href="https://docs.compense.co/en/getting-started/llave-de-api/"&gt;sandbox key&lt;/a&gt; and the
&lt;a href="https://docs.compense.co/en/getting-started/instalacion/"&gt;SDK installed&lt;/a&gt;. Pick your language in any tab: your choice is
remembered across the whole site.&lt;/p&gt;</description></item><item><title>Idempotency</title><link>https://docs.compense.co/en/conceptos/idempotencia/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/conceptos/idempotencia/</guid><description>&lt;p&gt;On a real network, requests get cut off: a timeout, a load balancer that restarts, your process
dying right after sending. At that point you &lt;strong&gt;don&amp;rsquo;t know&lt;/strong&gt; whether Compense executed the operation. If
you retry blindly you might disburse twice; if you don&amp;rsquo;t retry, you might leave a payment undone.
The &lt;code&gt;Idempotency-Key&lt;/code&gt; resolves that dilemma: retrying with the &lt;strong&gt;same&lt;/strong&gt; key is always safe.&lt;/p&gt;</description></item><item><title>Loan collections</title><link>https://docs.compense.co/en/recetas/recaudo-de-cartera/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/recetas/recaudo-de-cartera/</guid><description>&lt;p&gt;At the &lt;strong&gt;Caja Horizonte&lt;/strong&gt; branch offices, affiliates pay their loan installments in cash, and every
month the payroll deduction file (libranza) arrives as well. All that money comes in outside the
platform, so the family compensation fund (caja de compensación) has to &lt;strong&gt;report&lt;/strong&gt; it to Compense
to keep the balance, delinquency, the affiliate&amp;rsquo;s app, and the paid-in-full certificate (paz y salvo)
up to date. This recipe connects the teller system and the payroll file process to the
&lt;a href="https://docs.compense.co/en/modulos/cartera/"&gt;Loans&lt;/a&gt; module.&lt;/p&gt;</description></item><item><title>PHP</title><link>https://docs.compense.co/en/sdks/php/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/sdks/php/</guid><description>&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Package&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;compense/sdk&lt;/code&gt; (namespace &lt;code&gt;Compense\Sdk&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Version&lt;/td&gt;
 &lt;td&gt;1.1.0 · API v1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Requirements&lt;/td&gt;
 &lt;td&gt;PHP 8.1+ (&lt;code&gt;declare(strict_types=1)&lt;/code&gt;, &lt;code&gt;readonly&lt;/code&gt; DTOs)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HTTP&lt;/td&gt;
 &lt;td&gt;Any &lt;a href="https://www.php-fig.org/psr/psr-18/"&gt;PSR-18&lt;/a&gt; client + PSR-17 factories, discovered with &lt;code&gt;php-http/discovery&lt;/code&gt; (Guzzle suggested)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Repository&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Appiasoft/compense-saas-sdk-php"&gt;Appiasoft/compense-saas-sdk-php&lt;/a&gt; · guides in &lt;code&gt;docs/&lt;/code&gt; · examples in &lt;code&gt;examples/&lt;/code&gt; (plain PHP and Laravel)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="instalar"&gt;Install &lt;a class="heading-anchor" href="#instalar" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;Shell&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;composer require compense/sdk guzzlehttp/guzzle
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# or with Symfony HttpClient:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;composer require compense/sdk symfony/http-client nyholm/psr7&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="cliente"&gt;Client &lt;a class="heading-anchor" href="#cliente" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;PHP&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;declare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strict_types&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;Compense\Sdk\CompenseClient&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;Compense\Sdk\RetryConfig&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;CompenseClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;COMPENSE_API_KEY&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// cmp_...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sandbox&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#39;production&amp;#39; (default) | &amp;#39;sandbox&amp;#39; | &amp;#39;dev&amp;#39;; or baseUrl: &amp;#39;...&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;30.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// applies when the SDK builds Guzzle
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;retry&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;RetryConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;maxAttempts&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;retryWrites&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;httpClient&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// any PSR-18 (container, mocks…)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$psrLogger&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// PSR-3: deprecation warnings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you pass your own &lt;code&gt;httpClient&lt;/code&gt;, set the timeout on it. The PSR-17 factories (&lt;code&gt;requestFactory:&lt;/code&gt;,
&lt;code&gt;streamFactory:&lt;/code&gt;) are discovered automatically if you don&amp;rsquo;t provide them.&lt;/p&gt;</description></item><item><title>Subsidies</title><link>https://docs.compense.co/en/api-reference/subsidies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/subsidies/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/subsidios/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Subsidies and monetary allowance</title><link>https://docs.compense.co/en/modulos/subsidios/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/modulos/subsidios/</guid><description>&lt;p&gt;This module covers both subsidy fronts of a family compensation fund (caja de compensación):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Application-based subsidies&lt;/strong&gt; (e.g. the unemployment subsidy): the affiliate requests them, you
submit them, and an analyst or the rules engine decides them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monetary allowance&lt;/strong&gt;: the cash subsidy per dependent that is settled &lt;strong&gt;every period&lt;/strong&gt;. There is
no application here: you generate the month&amp;rsquo;s settlement, review it and disburse each allowance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The affiliate must exist in your entity&amp;rsquo;s registry (see &lt;a href="https://docs.compense.co/en/modulos/afiliados/"&gt;Affiliates&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>The compense CLI</title><link>https://docs.compense.co/en/sandbox/cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/sandbox/cli/</guid><description>&lt;p&gt;&lt;code&gt;compense&lt;/code&gt; is a command-line tool for the tasks you do by hand while you integrate: validating a key,
browsing the event catalog, registering an endpoint, triggering a test event, reviewing and retrying
deliveries, moving a test clock, advancing a simulator and forwarding webhooks to your machine. Each
command is a thin wrapper over the SDK and &lt;strong&gt;prints the gateway&amp;rsquo;s response as JSON&lt;/strong&gt;, so you can pipe
it into &lt;code&gt;jq&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Verify the signature</title><link>https://docs.compense.co/en/webhooks/verificacion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/webhooks/verificacion/</guid><description>&lt;p&gt;Your endpoint is a public URL: anyone can &lt;code&gt;POST&lt;/code&gt; to it. The &lt;strong&gt;signature&lt;/strong&gt; is what guarantees that the
body was sent by Compense and that nobody tampered with it along the way. &lt;strong&gt;Never process a delivery
without verifying it first.&lt;/strong&gt; This page includes complete receivers in the five SDK languages, plus
manual verification in case you don&amp;rsquo;t use an SDK.&lt;/p&gt;</description></item><item><title>Subsidies</title><link>https://docs.compense.co/en/guias/subsidios/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/guias/subsidios/</guid><description>&lt;p&gt;The &lt;strong&gt;Subsidies&lt;/strong&gt; module lets you manage, end to end, the economic aid your family compensation fund (caja de compensación)
provides to its affiliates: from the moment the affiliate &lt;strong&gt;submits&lt;/strong&gt; a request in the app or the portal, through
the operator&amp;rsquo;s &lt;strong&gt;review and decision&lt;/strong&gt;, to the &lt;strong&gt;disbursement&lt;/strong&gt; of the money.&lt;/p&gt;</description></item><item><title>Loans</title><link>https://docs.compense.co/en/guias/creditos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/guias/creditos/</guid><description>&lt;p&gt;The &lt;strong&gt;Loans&lt;/strong&gt; module covers the full lifecycle of a loan to an affiliate: &lt;strong&gt;application →
evaluation → decision → disbursement → repayment&lt;/strong&gt;. The affiliate simulates and applies from the app or the
portal; the platform evaluates the risk automatically; the operator decides the amount and the term; and,
once disbursed, the affiliate checks and pays their installments.&lt;/p&gt;</description></item><item><title>Payments and Wallet</title><link>https://docs.compense.co/en/guias/pagos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/guias/pagos/</guid><description>&lt;p&gt;When your family compensation fund (caja de compensación) approves a subsidy or disburses a loan, the money reaches the affiliate through
their &lt;strong&gt;digital wallet&lt;/strong&gt;. This guide explains, for &lt;strong&gt;affiliates&lt;/strong&gt; and &lt;strong&gt;operators&lt;/strong&gt;, what the
wallet is, how payments are disbursed, how to check the balance and transactions, and how to verify the
status of a disbursement.&lt;/p&gt;</description></item><item><title>Affiliates</title><link>https://docs.compense.co/en/guias/afiliados/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/guias/afiliados/</guid><description>&lt;p&gt;The &lt;strong&gt;affiliate registry&lt;/strong&gt; is the master record of the people affiliated with your family compensation fund (caja de compensación). Everything
else depends on its accuracy: who gets paid a subsidy, who can receive a monetary allowance, or
who meets the requirements for a loan. This guide explains, for &lt;strong&gt;operators&lt;/strong&gt;, how to look up,
register and update affiliates and their family group, and how to keep the database up to date.&lt;/p&gt;</description></item><item><title>PQRS</title><link>https://docs.compense.co/en/guias/pqrs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/guias/pqrs/</guid><description>&lt;p&gt;The &lt;strong&gt;PQRS (complaints and requests)&lt;/strong&gt; module is the formal channel for an affiliate of your family compensation fund (caja de compensación) to file a
&lt;strong&gt;P&lt;/strong&gt;etición (petition), &lt;strong&gt;Q&lt;/strong&gt;ueja (complaint), &lt;strong&gt;R&lt;/strong&gt;eclamo (claim) or &lt;strong&gt;S&lt;/strong&gt;ugerencia (suggestion), and for your operators to handle it within the &lt;strong&gt;legal
deadlines&lt;/strong&gt;. Each case gets a &lt;strong&gt;filing number&lt;/strong&gt;, moves through a set of &lt;strong&gt;statuses&lt;/strong&gt; and keeps
a &lt;strong&gt;complete audit trail&lt;/strong&gt; (who did what and when).&lt;/p&gt;</description></item><item><title>Notifications</title><link>https://docs.compense.co/en/guias/notificaciones/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/guias/notificaciones/</guid><description>&lt;p&gt;Compense &lt;strong&gt;keeps the affiliate informed&lt;/strong&gt; automatically: every time their request moves forward —it&amp;rsquo;s
submitted, decided, disbursed— or their PQRS gets a response, they receive a &lt;strong&gt;notice&lt;/strong&gt;. Your operators
don&amp;rsquo;t have to send anything manually: notifications fire on their own with each &lt;strong&gt;business
event&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>.NET</title><link>https://docs.compense.co/en/sdks/dotnet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/sdks/dotnet/</guid><description>&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;NuGet package&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Compense.Sdk&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Version&lt;/td&gt;
 &lt;td&gt;1.1.0 · API v1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Targets&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;net8.0&lt;/code&gt; and &lt;code&gt;netstandard2.0&lt;/code&gt; (.NET Framework 4.6.2+, .NET 6/7/8+, Mono)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dependencies&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;System.Text.Json&lt;/code&gt;, &lt;code&gt;Microsoft.Extensions.Http&lt;/code&gt;, &lt;code&gt;Microsoft.Extensions.Logging.Abstractions&lt;/code&gt;, &lt;code&gt;Microsoft.Extensions.Options.ConfigurationExtensions&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Repository&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Appiasoft/compense-saas-sdk-dotnet"&gt;Appiasoft/compense-saas-sdk-dotnet&lt;/a&gt; · guides in &lt;code&gt;docs/modulos/&lt;/code&gt; · examples in &lt;code&gt;examples/&lt;/code&gt; (console and webhook receiver)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="instalar"&gt;Install &lt;a class="heading-anchor" href="#instalar" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;Shell&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Compense.Sdk --version 1.1.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="cliente"&gt;Client &lt;a class="heading-anchor" href="#cliente" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;C#&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Compense.Sdk&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Compense.Sdk.Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;CompenseClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetEnvironmentVariable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;COMPENSE_API_KEY&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)!,&lt;/span&gt; &lt;span class="n"&gt;CompenseEnvironment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sandbox&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// With every option:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;configured&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;CompenseClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;CompenseClientOptions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ApiKey&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;cmp_...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Environment&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CompenseEnvironment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sandbox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Production (default) | Sandbox | Dev&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;BaseUrl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// another URL; takes precedence over Environment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Timeout&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromSeconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Retry&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;RetryOptions&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;MaxAttempts&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;RetryWrites&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;UserAgent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;horizonte-erp/2.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also use &lt;code&gt;new CompenseClient(httpClient, options)&lt;/code&gt; with your own &lt;code&gt;HttpClient&lt;/code&gt; (the SDK doesn&amp;rsquo;t
dispose it and ignores its &lt;code&gt;BaseAddress&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Charge an invoice from the wallet</title><link>https://docs.compense.co/en/recetas/cobrar-factura-desde-billetera/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/recetas/cobrar-factura-desde-billetera/</guid><description>&lt;p&gt;In this recipe, the &lt;strong&gt;Nova&lt;/strong&gt; app lets its users pay their electricity bill from their wallet. You&amp;rsquo;ll
walk through the full flow on Nova&amp;rsquo;s backend: choose the biller, look up the bill, confirm with the
user, pay without any risk of charging twice even if the network fails, learn the outcome by webhook
and hand over a receipt. The details of each operation are in the &lt;a href="https://docs.compense.co/en/modulos/billetera/#facturas-de-servicios"&gt;Wallet&lt;/a&gt;
guide.&lt;/p&gt;</description></item><item><title>Environments and keys</title><link>https://docs.compense.co/en/getting-started/entornos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/getting-started/entornos/</guid><description>&lt;p&gt;The gateway has &lt;strong&gt;a single contract&lt;/strong&gt; (the same paths, bodies and errors) across all its
deployments. What changes between &amp;ldquo;testing&amp;rdquo; and &amp;ldquo;operating&amp;rdquo; is &lt;strong&gt;the key&lt;/strong&gt; you call with.&lt;/p&gt;
&lt;h2 id="url-base-por-entorno"&gt;Base URL per environment &lt;a class="heading-anchor" href="#url-base-por-entorno" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;

&lt;div class="table-wrap"&gt;&lt;table&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th scope="col"&gt;Environment&lt;/th&gt;&lt;th scope="col"&gt;Base URL&lt;/th&gt;&lt;th scope="col"&gt;Python / JS / PHP&lt;/th&gt;&lt;th scope="col"&gt;.NET&lt;/th&gt;&lt;th scope="col"&gt;Go&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Production&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://api.compense.co&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;"production"&lt;/code&gt; (default)&lt;/td&gt;&lt;td&gt;&lt;code&gt;CompenseEnvironment.Production&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;compense.Production&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Sandbox&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://sandbox.dev.compense.co/gw&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;"sandbox"&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;CompenseEnvironment.Sandbox&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;compense.Sandbox&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Dev&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://gateway.dev.compense.co&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;"dev"&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;CompenseEnvironment.Dev&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;compense.Dev&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Every path starts with &lt;code&gt;/v1/gateway/...&lt;/code&gt;, so the base URL &lt;strong&gt;never&lt;/strong&gt; includes &lt;code&gt;/v1&lt;/code&gt;.
The sandbox URL keeps the &lt;code&gt;/gw&lt;/code&gt; prefix of the sandbox console: the full path is
&lt;code&gt;https://sandbox.dev.compense.co/gw/v1/gateway/health/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Production&lt;/strong&gt; is the URL declared in the contract. There&amp;rsquo;s no public production deployment yet:
the final URL is confirmed during onboarding. If it differs, pass it as a custom base URL
(&lt;code&gt;base_url&lt;/code&gt;, &lt;code&gt;baseUrl&lt;/code&gt;, &lt;code&gt;BaseUrl&lt;/code&gt;, &lt;code&gt;WithBaseURL&lt;/code&gt;), which always takes precedence over the environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dev&lt;/strong&gt; is Compense&amp;rsquo;s development gateway, useful for end-to-end testing with
real webhooks (with a production key issued for dev).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="la-llave-decide-no-la-url"&gt;The key decides, not the URL &lt;a class="heading-anchor" href="#la-llave-decide-no-la-url" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every key is issued with an &lt;code&gt;environment&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Monetary allowance</title><link>https://docs.compense.co/en/api-reference/monetary-allowance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/monetary-allowance/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/subsidios/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Retries and backoff</title><link>https://docs.compense.co/en/conceptos/reintentos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/conceptos/reintentos/</guid><description>&lt;p&gt;All five SDKs ship with the same retry policy, designed so that retrying &lt;strong&gt;never&lt;/strong&gt;
duplicates an operation.&lt;/p&gt;
&lt;h2 id="la-política-por-defecto"&gt;The default policy &lt;a class="heading-anchor" href="#la-pol%c3%adtica-por-defecto" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Parameter&lt;/th&gt;
 &lt;th&gt;Default value&lt;/th&gt;
 &lt;th&gt;What it does&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Maximum attempts&lt;/td&gt;
 &lt;td&gt;3 (the first + 2 retries)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;1&lt;/code&gt; disables retries.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Backoff base&lt;/td&gt;
 &lt;td&gt;0.5 s&lt;/td&gt;
 &lt;td&gt;Wait before the first retry, doubling on each one.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Backoff cap&lt;/td&gt;
 &lt;td&gt;30 s&lt;/td&gt;
 &lt;td&gt;No wait exceeds this value.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Jitter&lt;/td&gt;
 &lt;td&gt;full&lt;/td&gt;
 &lt;td&gt;Each wait is random between 0 and the calculated value, so clients don&amp;rsquo;t all synchronize.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Retry-After&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;honored&lt;/td&gt;
 &lt;td&gt;If the gateway sends it, the SDK waits exactly that long.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Statuses that are retried&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;429&lt;/code&gt;, &lt;code&gt;502&lt;/code&gt;, &lt;code&gt;503&lt;/code&gt;, &lt;code&gt;504&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Transient failures. Never business &lt;code&gt;4xx&lt;/code&gt; or &lt;code&gt;500&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Methods&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;GET&lt;/code&gt; only&lt;/td&gt;
 &lt;td&gt;Writes are retried only with &lt;code&gt;retry_writes&lt;/code&gt; enabled.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Network errors with no response&lt;/td&gt;
 &lt;td&gt;not retried&lt;/td&gt;
 &lt;td&gt;You resend them with the same &lt;code&gt;Idempotency-Key&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;figure class="diagram"&gt;
 &lt;pre class="mermaid"&gt;flowchart TD
 A[Request] --&amp;gt; B{Response?}
 B -- no: timeout / network --&amp;gt; X[Transport exception&amp;lt;br/&amp;gt;resend it yourself with the same key]
 B -- yes --&amp;gt; C{429/502/503/504?}
 C -- no --&amp;gt; D[Success or typed error]
 C -- yes --&amp;gt; E{GET or retry_writes?}
 E -- no --&amp;gt; D
 E -- yes --&amp;gt; F{Attempts left?}
 F -- no --&amp;gt; D
 F -- yes --&amp;gt; G[Wait Retry-After&amp;lt;br/&amp;gt;or backoff with jitter] --&amp;gt; A&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id="por-qué-las-escrituras-no-se-reintentan-solas"&gt;Why aren&amp;rsquo;t writes retried automatically? &lt;a class="heading-anchor" href="#por-qu%c3%a9-las-escrituras-no-se-reintentan-solas" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The gateway &lt;strong&gt;does&lt;/strong&gt; deduplicate: every write with a repeated &lt;code&gt;Idempotency-Key&lt;/code&gt; returns the stored
response (&lt;code&gt;idempotent_replay: true&lt;/code&gt;) instead of executing again, on every route that takes a key.
The reason is different: the SDK can&amp;rsquo;t know &lt;strong&gt;which version of the gateway&lt;/strong&gt; it&amp;rsquo;s talking to, and retrying a
write against an older deployment without that guarantee would execute it twice. That&amp;rsquo;s why the safe
default is to retry only &lt;code&gt;GET&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Rotate the secret</title><link>https://docs.compense.co/en/webhooks/rotacion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/webhooks/rotacion/</guid><description>&lt;p&gt;Rotate an endpoint&amp;rsquo;s secret when it leaked (or you suspect it leaked), when someone with access leaves
the team, when you lost it, or periodically according to your security policy. Rotation generates a
new secret and shows it &lt;strong&gt;only once&lt;/strong&gt;, just like when you create the endpoint.&lt;/p&gt;</description></item><item><title>Test data</title><link>https://docs.compense.co/en/sandbox/datos-de-prueba/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/sandbox/datos-de-prueba/</guid><description>&lt;p&gt;Everything in the sandbox is &lt;strong&gt;deterministic&lt;/strong&gt;: the result is decided by the document you send, a few
amounts and the ids the sandbox itself returns to you. This page gathers those values so you can write
automated tests that cover the happy path and every documented error. Remember that the sandbox
doesn&amp;rsquo;t store state: state travels in the ids, and a write doesn&amp;rsquo;t change what later reads return
(&lt;a href="https://docs.compense.co/en/sandbox/"&gt;Sandbox&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>Wallet</title><link>https://docs.compense.co/en/modulos/billetera/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/modulos/billetera/</guid><description>&lt;p&gt;This guide is for the technical team at a fintech (such as &lt;strong&gt;Nova&lt;/strong&gt;) or a family compensation fund
(caja de compensación, such as &lt;strong&gt;Caja Horizonte&lt;/strong&gt;) that operates its affiliates&amp;rsquo; wallet &lt;strong&gt;through the
API&lt;/strong&gt;, with the same rules as the app: balance and transactions, P2P transfers to another affiliate,
Bre-B to other banks, utility bill payments, mobile top-ups, sub-accounts (pockets, savings, goals),
cards and currency exchange. Everything lives under the contract&amp;rsquo;s &lt;code&gt;wallet&lt;/code&gt; tag and, in the SDKs,
under &lt;code&gt;client.wallet&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Go</title><link>https://docs.compense.co/en/sdks/go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/sdks/go/</guid><description>&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Module&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;github.com/Appiasoft/compense-saas-sdk-go&lt;/code&gt; (package &lt;code&gt;compense&lt;/code&gt;, subpackage &lt;code&gt;webhook&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Version&lt;/td&gt;
 &lt;td&gt;1.1.0 (&lt;code&gt;compense.Version&lt;/code&gt;) · API v1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Requirements&lt;/td&gt;
 &lt;td&gt;Go 1.21+ (&lt;code&gt;range-over-func&lt;/code&gt; iterators with Go 1.23+)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dependencies&lt;/td&gt;
 &lt;td&gt;Standard library only&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Repository&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Appiasoft/compense-saas-sdk-go"&gt;Appiasoft/compense-saas-sdk-go&lt;/a&gt; · guides in &lt;code&gt;docs/&lt;/code&gt; · examples in &lt;code&gt;examples/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="instalar"&gt;Install &lt;a class="heading-anchor" href="#instalar" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;Shell&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go get github.com/Appiasoft/compense-saas-sdk-go@v1.1.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Private repository: GOPRIVATE=github.com/Appiasoft/* and git credentials&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="cliente"&gt;Client &lt;a class="heading-anchor" href="#cliente" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;Go&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;github.com/Appiasoft/compense-saas-sdk-go&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;COMPENSE_API_KEY&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithEnvironment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Sandbox&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Production (default) | Sandbox | Dev&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithBaseURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://gw.example.co&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// another URL; takes precedence over the environment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithHTTPClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myHTTPClient&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// proxies, mTLS, tracing, tests (not modified)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Second&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// per attempt (only for the client the SDK creates)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithRetry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RetryConfig&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;MaxAttempts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithRetryWrites&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithUserAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;horizonte-erp/2.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;compense&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithLogger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;slog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Default&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// deprecation warnings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// *compense.ConfigError&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;*Client&lt;/code&gt; is safe for concurrent use: create one per key and reuse it. Every method takes a
&lt;code&gt;context.Context&lt;/code&gt; first (deadlines and cancellation, including during the waits between retries).&lt;/p&gt;</description></item><item><title>Loan portfolio</title><link>https://docs.compense.co/en/modulos/cartera/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/modulos/cartera/</guid><description>&lt;p&gt;The &lt;code&gt;loans&lt;/code&gt; module picks up where &lt;a href="https://docs.compense.co/en/modulos/creditos/"&gt;Credit&lt;/a&gt; leaves off: once disbursed, the loan
has an installment schedule, interest, arrears and a balance. From your system you can &lt;strong&gt;query&lt;/strong&gt; all
of that (for your online branch, your &lt;em&gt;call center&lt;/em&gt; or your ERP) and &lt;strong&gt;report the collections&lt;/strong&gt; your
entity receives outside the platform: the cash desk, payroll or &lt;em&gt;libranza&lt;/em&gt; (payroll-deduction)
deductions, the bank file, an extra payment or a full payoff.&lt;/p&gt;</description></item><item><title>problem+json errors</title><link>https://docs.compense.co/en/conceptos/errores/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/conceptos/errores/</guid><description>&lt;p&gt;Every non-&lt;code&gt;2xx&lt;/code&gt; response arrives as &lt;code&gt;application/problem+json&lt;/code&gt;
(&lt;a href="https://www.rfc-editor.org/rfc/rfc9457"&gt;RFC 9457&lt;/a&gt;), with the same shape across all 13 modules:&lt;/p&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;JSON&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://errors.compense.co/gateway/validation&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Validation error&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;422&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;detail&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;One or more fields are invalid.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;trace_id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;9f1c2e7a4b8d4e6fa1c0d2e3f4a5b6c7&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;errors&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;field&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;term_months&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Input should be greater than or equal to 1&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;What it is&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;URI of the error type (or &lt;code&gt;about:blank&lt;/code&gt;). Use it to tell apart cases that share a code.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Short summary in English.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;status&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The HTTP code.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;detail&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Explanation. For engine rejections it carries the &lt;strong&gt;engine&amp;rsquo;s message in Spanish&lt;/strong&gt; (for example «Saldo insuficiente»); when the engine sends no message, the gateway quotes its code (&lt;code&gt;(code: INSUFFICIENT_FUNDS)&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;trace_id&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Same as the &lt;code&gt;X-Request-ID&lt;/code&gt; header. &lt;strong&gt;Always give it to support.&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;errors&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Only on &lt;code&gt;422&lt;/code&gt;: a list of &lt;code&gt;{field, message}&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The gateway &lt;strong&gt;never&lt;/strong&gt; forwards the engine&amp;rsquo;s raw body or stack trace: on &lt;code&gt;502/504&lt;/code&gt; the detail is
generic and the real error is logged under the &lt;code&gt;trace_id&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Retries and deliveries</title><link>https://docs.compense.co/en/webhooks/reintentos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/webhooks/reintentos/</guid><description>&lt;p&gt;Every time Compense tries to bring an event to one of your endpoints it creates a &lt;strong&gt;delivery&lt;/strong&gt;. If
your receiver doesn&amp;rsquo;t respond &lt;code&gt;2xx&lt;/code&gt;, the delivery is retried automatically; and everything is kept in
a &lt;strong&gt;history&lt;/strong&gt; you can query, filter and, for deliveries that failed, &lt;strong&gt;retry manually&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Send money: P2P and Bre-B</title><link>https://docs.compense.co/en/recetas/transferencia-p2p-y-breb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/recetas/transferencia-p2p-y-breb/</guid><description>&lt;p&gt;In this recipe, the &lt;strong&gt;Nova&lt;/strong&gt; app lets users send money to anyone using their mobile number, email,
ID number, or alias. If the recipient is also a Nova user, the transfer is an internal, instant
&lt;strong&gt;P2P&lt;/strong&gt; transfer; if their key is at another bank, it goes through &lt;strong&gt;Bre-B&lt;/strong&gt; (Colombia&amp;rsquo;s instant
payments). Nova&amp;rsquo;s backend picks the rail, shows who is going to be paid, sends within the token&amp;rsquo;s
lifetime, and reconciles the final result by webhook. The operations are described in
&lt;a href="https://docs.compense.co/en/modulos/billetera/#transferencia-p2p-a-otro-afiliado"&gt;Wallet&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Wallet</title><link>https://docs.compense.co/en/api-reference/wallet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/wallet/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/billetera/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Loans</title><link>https://docs.compense.co/en/api-reference/loans/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/loans/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/cartera/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Medical appointment and EPS collection</title><link>https://docs.compense.co/en/recetas/cita-medica-y-recaudo-eps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/recetas/cita-medica-y-recaudo-eps/</guid><description>&lt;p&gt;&lt;strong&gt;IPS Horizonte Salud&lt;/strong&gt;, a healthcare provider (IPS), books appointments from its call center and its
portal, and reconciles the transfers it receives from each EPS (health insurer) in its accounts
receivable system. In this recipe you connect that journey to Compense: you find a slot, book on the
patient&amp;rsquo;s behalf, send a reminder, handle cancellations and reschedules, record attendance, locate
the invoice for the visit and register the EPS payment without duplicating it. The details of each
operation are in the &lt;a href="https://docs.compense.co/en/modulos/salud/"&gt;Health&lt;/a&gt; guide.&lt;/p&gt;</description></item><item><title>Pagination</title><link>https://docs.compense.co/en/conceptos/paginacion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/conceptos/paginacion/</guid><description>&lt;p&gt;Gateway lists come in one of two shapes:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Shape&lt;/th&gt;
 &lt;th&gt;Fields&lt;/th&gt;
 &lt;th&gt;Parameters&lt;/th&gt;
 &lt;th&gt;Where&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Page&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;count&lt;/code&gt;, &lt;code&gt;results&lt;/code&gt;, &lt;code&gt;next&lt;/code&gt;, &lt;code&gt;previous&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;page&lt;/code&gt;, &lt;code&gt;page_size&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Credit and subsidy queues, monetary allowance, PQRS, health (appointments, invoices, billing objections, schedule), administrative, webhook deliveries, loans&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;OffsetPage&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;results&lt;/code&gt;, &lt;code&gt;limit&lt;/code&gt;, &lt;code&gt;offset&lt;/code&gt;, &lt;code&gt;has_more&lt;/code&gt;, &lt;code&gt;next_offset&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;limit&lt;/code&gt;, &lt;code&gt;offset&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Wallet movements and bill payments&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In every SDK a page is &lt;strong&gt;iterable&lt;/strong&gt; over its &lt;code&gt;results&lt;/code&gt; and keeps the original body in
&lt;code&gt;raw&lt;/code&gt;. What differs is how you request the next ones.&lt;/p&gt;</description></item><item><title>PQRS</title><link>https://docs.compense.co/en/modulos/pqrs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/modulos/pqrs/</guid><description>&lt;p&gt;With this module, your CRM or call center manages your affiliates&amp;rsquo; &lt;strong&gt;PQRS&lt;/strong&gt; (complaints and
requests: petitions, complaints, claims and suggestions) &lt;strong&gt;server-to-server&lt;/strong&gt;, without logging in to
the Compense dashboard: you submit cases on the affiliate&amp;rsquo;s behalf, list and filter them (including
overdue ones), look up the details with their history, respond as the entity and change the status or
priority. The rules are exactly the same as in the app and the dashboard: a &lt;code&gt;PQRS-AAAA-NNNNNN&lt;/code&gt; filing
number (&lt;em&gt;radicado&lt;/em&gt;), a statutory deadline, a state machine and a notification to the affiliate when
they get a response.&lt;/p&gt;</description></item><item><title>Test your webhooks</title><link>https://docs.compense.co/en/webhooks/pruebas/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/webhooks/pruebas/</guid><description>&lt;p&gt;Before going to production you want to see your receiver accept a &lt;strong&gt;genuinely signed&lt;/strong&gt; delivery,
reject a tampered one and respond in time. This page covers the four tools to get there: the API test
event, the &lt;code&gt;compense&lt;/code&gt; CLI (&lt;code&gt;trigger&lt;/code&gt; and &lt;code&gt;listen&lt;/code&gt;), unit tests without a network and the webhooks
sandbox.&lt;/p&gt;</description></item><item><title>Amounts as decimal strings</title><link>https://docs.compense.co/en/conceptos/montos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/conceptos/montos/</guid><description>&lt;p&gt;In the contract, every amount is a &lt;strong&gt;decimal string&lt;/strong&gt;: the
&lt;a href="https://docs.compense.co/en/api-reference/esquemas/#MoneyCOP"&gt;&lt;code&gt;MoneyCOP&lt;/code&gt;&lt;/a&gt; schema (&lt;code&gt;&amp;quot;3500000&amp;quot;&lt;/code&gt;, &lt;code&gt;&amp;quot;467009.88&amp;quot;&lt;/code&gt;, &lt;code&gt;&amp;quot;53500.00&amp;quot;&lt;/code&gt;). Never
a floating-point number.&lt;/p&gt;

&lt;div class="codeblock"&gt;
 &lt;div class="codeblock__bar"&gt;
 &lt;span class="codeblock__lang"&gt;JSON&lt;/span&gt;
 &lt;button class="copy-btn" type="button" data-copy aria-label="Copy the code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;amount&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;467009.88&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;currency&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;COP&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The reason is simple: &lt;code&gt;0.1 + 0.2&lt;/code&gt; isn&amp;rsquo;t &lt;code&gt;0.3&lt;/code&gt; in binary. A &lt;code&gt;float&lt;/code&gt; can turn &lt;code&gt;467009.88&lt;/code&gt; into
&lt;code&gt;467009.87999999995&lt;/code&gt; somewhere along the way (your ORM, your JSON serializer, a
spreadsheet), and with money a one-cent difference breaks a reconciliation. A string travels exactly from
end to end.&lt;/p&gt;</description></item><item><title>From payroll to accounting</title><link>https://docs.compense.co/en/recetas/nomina-a-contabilidad/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/recetas/nomina-a-contabilidad/</guid><description>&lt;p&gt;&lt;strong&gt;Caja Horizonte&lt;/strong&gt; records its staff&amp;rsquo;s overtime and surcharges in a shift system and keeps its books
in an ERP. In this recipe you connect both to Compense&amp;rsquo;s &lt;a href="https://docs.compense.co/en/modulos/administrativo/"&gt;Administrative&lt;/a&gt;
module: you load the month&amp;rsquo;s payroll adjustments into the payroll period, wait for payroll to approve it in the
panel, read the payslips and the electronic payroll status, and record the journal entry &lt;strong&gt;as a
draft&lt;/strong&gt; so the accountant can post it.&lt;/p&gt;</description></item><item><title>Health (IPS)</title><link>https://docs.compense.co/en/modulos/salud/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/modulos/salud/</guid><description>&lt;p&gt;This guide is for the technical team of a &lt;strong&gt;healthcare provider (IPS)&lt;/strong&gt; (or an entity (organization)
that has the health module enabled) integrating its system with Compense &lt;strong&gt;server-to-server&lt;/strong&gt;:
appointment scheduling, health billing and the vaccination card. It&amp;rsquo;s the same gateway and the same
security model as loans or the wallet. The examples use &lt;strong&gt;IPS Horizonte Salud&lt;/strong&gt;, which books
appointments from its call center and reconciles EPS (health insurer) remittances from its accounts
receivable system.&lt;/p&gt;</description></item><item><title>PQRS</title><link>https://docs.compense.co/en/api-reference/pqrs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/pqrs/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/pqrs/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Administrative (ERP)</title><link>https://docs.compense.co/en/modulos/administrativo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/modulos/administrativo/</guid><description>&lt;p&gt;This guide is for the technical team at an entity (a family compensation fund (caja de
compensación), fintech or healthcare provider (IPS)) that integrates &lt;strong&gt;its ERP&lt;/strong&gt; with Compense&amp;rsquo;s
&lt;strong&gt;Administrative Management&lt;/strong&gt; (Gestión Administrativa) module: HR, payroll, accounting and treasury.
Everything is server-to-server with the entity&amp;rsquo;s key; no end user is involved. The examples use
&lt;strong&gt;Caja Horizonte&lt;/strong&gt;&amp;rsquo;s ERP, which identifies its documents with &lt;code&gt;HORIZONTE-ERP-…&lt;/code&gt; references.&lt;/p&gt;</description></item><item><title>Health services</title><link>https://docs.compense.co/en/api-reference/health/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/health/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/salud/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Versioning and deprecations</title><link>https://docs.compense.co/en/conceptos/deprecaciones/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/conceptos/deprecaciones/</guid><description>&lt;h2 id="versiones"&gt;Versions &lt;a class="heading-anchor" href="#versiones" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The API&lt;/strong&gt; is on major version &lt;strong&gt;v1&lt;/strong&gt;, which is part of the path (&lt;code&gt;/v1/gateway/...&lt;/code&gt;). Within
&lt;code&gt;v1&lt;/code&gt; only &lt;strong&gt;backward-compatible&lt;/strong&gt; changes are made.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The SDKs&lt;/strong&gt; follow SemVer &lt;strong&gt;aligned with the API&lt;/strong&gt;: the SDK&amp;rsquo;s major version is the API&amp;rsquo;s major
version (&lt;code&gt;1.x&lt;/code&gt; talks to &lt;code&gt;v1&lt;/code&gt;). They&amp;rsquo;re all currently on &lt;strong&gt;1.1.0&lt;/strong&gt; (&lt;a href="https://docs.compense.co/en/changelog/"&gt;changelog&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cambios-compatibles-pueden-llegar-sin-aviso"&gt;Backward-compatible changes (may ship without notice) &lt;a class="heading-anchor" href="#cambios-compatibles-pueden-llegar-sin-aviso" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New&lt;/strong&gt; operations, modules and webhook events.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New&lt;/strong&gt; fields in responses and in the webhook &lt;code&gt;resource&lt;/code&gt; (the event&amp;rsquo;s &lt;code&gt;version&lt;/code&gt;
doesn&amp;rsquo;t change).&lt;/li&gt;
&lt;li&gt;New &lt;strong&gt;optional&lt;/strong&gt; parameters.&lt;/li&gt;
&lt;li&gt;New values in &lt;strong&gt;response&lt;/strong&gt; enumerations (statuses, categories).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Write your integration to tolerate them: ignore fields you don&amp;rsquo;t recognize, don&amp;rsquo;t validate the event
catalog against a closed list, and treat unknown statuses as &amp;ldquo;pending review&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Administrative</title><link>https://docs.compense.co/en/api-reference/admin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/admin/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/administrativo/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Rate limits and quotas</title><link>https://docs.compense.co/en/conceptos/limites-de-tasa/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/conceptos/limites-de-tasa/</guid><description>&lt;p&gt;Every key has two limits, configured when it&amp;rsquo;s issued:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Limit&lt;/th&gt;
 &lt;th&gt;Default value&lt;/th&gt;
 &lt;th&gt;When exceeded&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Per minute&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;120 requests per minute&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;429&lt;/code&gt; with &lt;code&gt;Retry-After&lt;/code&gt; until the window frees up&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Monthly quota&lt;/strong&gt; (optional)&lt;/td&gt;
 &lt;td&gt;No quota, unless your contract sets one&lt;/td&gt;
 &lt;td&gt;Warnings when thresholds are crossed and, depending on the contract, &lt;code&gt;429&lt;/code&gt; until the next period&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If your volume needs more, ask for it during onboarding or from support: the limit is adjusted per key.&lt;/p&gt;</description></item><item><title>Transactions and system</title><link>https://docs.compense.co/en/modulos/transacciones-y-sistema/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/modulos/transacciones-y-sistema/</guid><description>&lt;p&gt;Two cross-cutting operations that don&amp;rsquo;t belong to any business module, but that every integration
uses:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Operation&lt;/th&gt;
 &lt;th&gt;SDK method (Python)&lt;/th&gt;
 &lt;th&gt;Scope&lt;/th&gt;
 &lt;th&gt;Used for&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;
&lt;a class="op-link" href="https://docs.compense.co/en/api-reference/transactions/#getTransaction"&gt;&lt;span class="verb verb--get"&gt;GET&lt;/span&gt;&lt;code&gt;/v1/gateway/transactions/{tx_id}/&lt;/code&gt;&lt;/a&gt;
&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;client.transactions.get(tx_id)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;none (any valid key)&lt;/td&gt;
 &lt;td&gt;State and trace of a write you made through the gateway.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;
&lt;a class="op-link" href="https://docs.compense.co/en/api-reference/system/#gatewayHealth"&gt;&lt;span class="verb verb--get"&gt;GET&lt;/span&gt;&lt;code&gt;/v1/gateway/health/&lt;/code&gt;&lt;/a&gt;
&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;client.system.health()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;none&lt;/td&gt;
 &lt;td&gt;Validate the key: tenant and scopes. Health check for your monitoring.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In the other SDKs: &lt;code&gt;client.transactions.get&lt;/code&gt; / &lt;code&gt;client.system.health()&lt;/code&gt; (TypeScript),
&lt;code&gt;$client-&amp;gt;transactions-&amp;gt;get&lt;/code&gt; / &lt;code&gt;$client-&amp;gt;system-&amp;gt;health()&lt;/code&gt; (PHP), &lt;code&gt;client.Transactions.GetAsync&lt;/code&gt; /
&lt;code&gt;client.System.HealthAsync()&lt;/code&gt; (.NET) and &lt;code&gt;client.Transactions.Get&lt;/code&gt; / &lt;code&gt;client.System.Health&lt;/code&gt; (Go).&lt;/p&gt;</description></item><item><title>Webhooks</title><link>https://docs.compense.co/en/api-reference/webhooks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/webhooks/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/webhooks/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Sandbox</title><link>https://docs.compense.co/en/api-reference/sandbox/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/sandbox/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/sandbox/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Transactions</title><link>https://docs.compense.co/en/api-reference/transactions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/transactions/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/transacciones-y-sistema/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>System</title><link>https://docs.compense.co/en/api-reference/system/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/system/</guid><description>&lt;p&gt;This page is &lt;strong&gt;generated from the contract&lt;/strong&gt; (&lt;code&gt;data/gateway-v1.json&lt;/code&gt;): each operation shows its verb,
path, parameters, body, responses, whether it carries an &lt;code&gt;Idempotency-Key&lt;/code&gt;, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the &lt;a href="https://docs.compense.co/en/modulos/transacciones-y-sistema/"&gt;implementation guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Schemas</title><link>https://docs.compense.co/en/api-reference/esquemas/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.compense.co/en/api-reference/esquemas/</guid><description>&lt;p&gt;The contract&amp;rsquo;s schemas exactly as the gateway publishes them. Fields marked as &lt;em&gt;required&lt;/em&gt; must
be sent in the request; &lt;code&gt;additionalProperties&lt;/code&gt; means the gateway forwards any additional fields to the engine
untouched (which is why the SDKs accept &lt;code&gt;extra&lt;/code&gt; / &lt;code&gt;fields&lt;/code&gt;).&lt;/p&gt;</description></item></channel></rss>