{
  "openapi": "3.1.0",
  "externalDocs": {
    "description": "Portal de documentação Altha One",
    "url": "https://docs.althaone.com.br/"
  },
  "info": {
    "title": "Altha One — Integração Pix",
    "version": "1"
  },
  "servers": [
    {
      "url": "https://api.althaone.com.br/api/v1/pix"
    }
  ],
  "security": [
    {
      "ApiKey": []
    }
  ],
  "paths": {
    "/charges": {
      "post": {
        "summary": "Criar cobrança Pix",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{1,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "amount_minor",
                  "external_reference"
                ],
                "properties": {
                  "amount_minor": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2000000000
                  },
                  "external_reference": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 128
                  },
                  "description": {
                    "type": "string",
                    "maxLength": 200,
                    "default": ""
                  },
                  "expires_in_seconds": {
                    "type": "integer",
                    "minimum": 60,
                    "maximum": 86400,
                    "default": 3600
                  },
                  "metadata": {
                    "type": "object",
                    "description": "Até 4096 bytes em JSON."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Intenção persistida. Não significa pagamento ou saque concluído.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "external_reference": {
                      "type": "string"
                    },
                    "status": {
                      "enum": [
                        "PENDING",
                        "PAID",
                        "EXPIRED",
                        "CANCELLED",
                        "FAILED"
                      ]
                    },
                    "amount_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "currency": {
                      "const": "BRL"
                    },
                    "created_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "updated_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "source": {
                      "enum": [
                        "API",
                        "AUTOMATIC_PAYOUT"
                      ]
                    },
                    "source_charge_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "error": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "qr_copy_paste": {
                      "type": "string"
                    },
                    "qr_image": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Data URL PNG pronta para img src."
                    },
                    "expires_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "paid_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "automatic_payout": {
                      "const": true
                    },
                    "withdrawal": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        }
                      }
                    },
                    "commercial": {
                      "type": "object",
                      "properties": {
                        "gross_minor": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "fee_minor": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "minimum": 0
                        },
                        "net_minor": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "minimum": 0
                        },
                        "applied": {
                          "type": "boolean"
                        }
                      }
                    },
                    "metadata": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-codeSamples": [
          {
            "lang": "cURL",
            "source": "# LIVE. Guarde a chave no seu backend; não no navegador.\n# Persista ALTHA_IDEMPOTENCY_KEY antes da chamada. Reutilize-a em timeout.\ncurl --silent --show-error --fail-with-body --include --max-time 15 \\\n  --request POST 'https://api.althaone.com.br/api/v1/pix/charges' \\\n  --header \"Authorization: Bearer $ALTHA_API_KEY\" \\\n  --header 'Accept: application/json' \\\n  --header 'Content-Type: application/json' \\\n  --header \"Idempotency-Key: $ALTHA_IDEMPOTENCY_KEY\" \\\n  --data '{\n  \"amount_minor\": 10000,\n  \"external_reference\": \"pedido-123\",\n  \"description\": \"Pagamento do pedido 123\",\n  \"expires_in_seconds\": 3600,\n  \"metadata\": {\n    \"order_id\": \"123\"\n  }\n}'"
          },
          {
            "lang": "Node.js",
            "source": "// Node.js 20+ · chave somente no backend\nconst apiKey = process.env.ALTHA_API_KEY;\nif (!apiKey) throw new Error('Configure ALTHA_API_KEY no servidor');\nconst key = process.env.ALTHA_IDEMPOTENCY_KEY;\nif (!key) throw new Error('Use a chave persistida da intenção');\nconst response = await fetch(\"https://api.althaone.com.br/api/v1/pix/charges\", {\n  method: \"POST\",\n  headers: {\n    Authorization: 'Bearer ' + apiKey, Accept: 'application/json',\n    'Content-Type': 'application/json', 'Idempotency-Key': key,\n  },\n  signal: AbortSignal.timeout(15000),\n  body: JSON.stringify({\n  \"amount_minor\": 10000,\n  \"external_reference\": \"pedido-123\",\n  \"description\": \"Pagamento do pedido 123\",\n  \"expires_in_seconds\": 3600,\n  \"metadata\": {\n    \"order_id\": \"123\"\n  }\n}),\n});\nconst data = await response.json();\nif (!response.ok) throw new Error(JSON.stringify({http: response.status, ...data.error}));\nconsole.log(data);\n// Em falha de transporte, preserve a intenção; não troque a chave de um POST."
          },
          {
            "lang": "PHP",
            "source": "<?php\ndeclare(strict_types=1);\n$apiKey=getenv('ALTHA_API_KEY');\nif (!$apiKey) throw new RuntimeException('Configure a chave no servidor');\n$key=getenv('ALTHA_IDEMPOTENCY_KEY');\nif (!$key) throw new RuntimeException('Use a chave persistida da intenção');\n$headers=['Authorization: Bearer '.$apiKey,'Accept: application/json'];\n$headers[]='Content-Type: application/json';\n$headers[]='Idempotency-Key: '.$key;\n$body=json_decode('{\n  \"amount_minor\": 10000,\n  \"external_reference\": \"pedido-123\",\n  \"description\": \"Pagamento do pedido 123\",\n  \"expires_in_seconds\": 3600,\n  \"metadata\": {\n    \"order_id\": \"123\"\n  }\n}',true,512,JSON_THROW_ON_ERROR);\n$ch=curl_init('https://api.althaone.com.br/api/v1/pix/charges');\ncurl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'POST',\n  CURLOPT_HTTPHEADER=>$headers,CURLOPT_CONNECTTIMEOUT=>5,CURLOPT_TIMEOUT=>15,CURLOPT_FOLLOWLOCATION=>false]);\ncurl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($body,JSON_THROW_ON_ERROR));\n$raw=curl_exec($ch);\nif ($raw===false) throw new RuntimeException('Comunicação incerta; preserve a intenção');\n$http=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);\n$data=json_decode($raw,true,512,JSON_THROW_ON_ERROR);\nif ($http<200||$http>=300) throw new RuntimeException(json_encode($data['error']??['http'=>$http]));\nprint_r($data);"
          },
          {
            "lang": "Python",
            "source": "# Python 3.10+ · biblioteca padrão\nimport os, json, urllib.request, urllib.error\napi_key = os.environ[\"ALTHA_API_KEY\"]\nkey = os.environ[\"ALTHA_IDEMPOTENCY_KEY\"]\nheaders = {\"Authorization\": \"Bearer \" + api_key, \"Accept\": \"application/json\"}\nheaders.update({\"Content-Type\": \"application/json\", \"Idempotency-Key\": key})\nbody = json.loads(\"{\\n  \\\"amount_minor\\\": 10000,\\n  \\\"external_reference\\\": \\\"pedido-123\\\",\\n  \\\"description\\\": \\\"Pagamento do pedido 123\\\",\\n  \\\"expires_in_seconds\\\": 3600,\\n  \\\"metadata\\\": {\\n    \\\"order_id\\\": \\\"123\\\"\\n  }\\n}\")\npayload = json.dumps(body).encode(\"utf-8\")\nreq = urllib.request.Request(\"https://api.althaone.com.br/api/v1/pix/charges\", data=payload, headers=headers, method=\"POST\")\ntry:\n    with urllib.request.urlopen(req, timeout=15) as response:\n        print(json.loads(response.read()))\nexcept urllib.error.HTTPError as error:\n    data = json.loads(error.read())\n    print({\"http\": error.code, \"error\": data.get(\"error\")})\n    raise\nexcept urllib.error.URLError:\n    # Resultado de transporte incerto: consulte/reuse a MESMA intenção.\n    raise"
          },
          {
            "lang": "Go",
            "source": "// Go 1.20+ · biblioteca padrão\npackage main\nimport (\"bytes\"; \"fmt\"; \"io\"; \"net/http\"; \"os\"; \"time\")\nfunc main() {\n apiKey := os.Getenv(\"ALTHA_API_KEY\")\n if apiKey == \"\" { panic(\"Configure a chave no servidor\") }\n key := os.Getenv(\"ALTHA_IDEMPOTENCY_KEY\")\n if key == \"\" { panic(\"Use a chave persistida da intenção\") }\n payload := []byte(\"{\\n  \\\"amount_minor\\\": 10000,\\n  \\\"external_reference\\\": \\\"pedido-123\\\",\\n  \\\"description\\\": \\\"Pagamento do pedido 123\\\",\\n  \\\"expires_in_seconds\\\": 3600,\\n  \\\"metadata\\\": {\\n    \\\"order_id\\\": \\\"123\\\"\\n  }\\n}\")\n req, err := http.NewRequest(\"POST\", \"https://api.althaone.com.br/api/v1/pix/charges\", bytes.NewReader(payload))\n if err != nil { panic(err) }\n req.Header.Set(\"Authorization\", \"Bearer \" + apiKey)\n req.Header.Set(\"Accept\", \"application/json\")\n req.Header.Set(\"Content-Type\", \"application/json\")\n req.Header.Set(\"Idempotency-Key\", key)\n client := &http.Client{Timeout:15*time.Second}\n response, err := client.Do(req)\n if err != nil { panic(\"Comunicação incerta: preserve a intenção original\") }\n defer response.Body.Close()\n data, err := io.ReadAll(response.Body)\n if err != nil { panic(err) }\n if response.StatusCode < 200 || response.StatusCode >= 300 { panic(string(data)) }\n fmt.Println(string(data))\n}"
          },
          {
            "lang": "Java",
            "source": "// Java 17+ · salve como PixExample.java\nimport java.net.URI;\nimport java.net.http.*;\nimport java.time.Duration;\npublic class PixExample {\n public static void main(String[] args) throws Exception {\n  String apiKey=System.getenv(\"ALTHA_API_KEY\");\n  if(apiKey==null||apiKey.isBlank()) throw new IllegalStateException(\"Configure a chave no servidor\");\n  String key=System.getenv(\"ALTHA_IDEMPOTENCY_KEY\");\n  if(key==null||key.isBlank()) throw new IllegalStateException(\"Use a chave persistida\");\n  HttpClient client=HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(5)).build();\n  HttpRequest request=HttpRequest.newBuilder(URI.create(\"https://api.althaone.com.br/api/v1/pix/charges\"))\n   .timeout(Duration.ofSeconds(15)).header(\"Authorization\",\"Bearer \"+apiKey).header(\"Accept\",\"application/json\")\n   .header(\"Content-Type\",\"application/json\").header(\"Idempotency-Key\",key)\n   .method(\"POST\",HttpRequest.BodyPublishers.ofString(\"{\\n  \\\"amount_minor\\\": 10000,\\n  \\\"external_reference\\\": \\\"pedido-123\\\",\\n  \\\"description\\\": \\\"Pagamento do pedido 123\\\",\\n  \\\"expires_in_seconds\\\": 3600,\\n  \\\"metadata\\\": {\\n    \\\"order_id\\\": \\\"123\\\"\\n  }\\n}\")).build();\n  HttpResponse<String> response=client.send(request,HttpResponse.BodyHandlers.ofString());\n  if(response.statusCode()<200||response.statusCode()>=300) throw new IllegalStateException(response.body());\n  System.out.println(response.body());\n }\n}"
          },
          {
            "lang": "C#",
            "source": "// C# · .NET 8+ · HttpClient padrão\nusing System;\nusing System.Net.Http;\nusing System.Text;\nvar apiKey=Environment.GetEnvironmentVariable(\"ALTHA_API_KEY\") ?? throw new Exception(\"Configure a chave no servidor\");\nvar key=Environment.GetEnvironmentVariable(\"ALTHA_IDEMPOTENCY_KEY\") ?? throw new Exception(\"Use a chave persistida\");\nusing var client=new HttpClient { Timeout=TimeSpan.FromSeconds(15) };\nusing var request=new HttpRequestMessage(new HttpMethod(\"POST\"), \"https://api.althaone.com.br/api/v1/pix/charges\");\nrequest.Headers.TryAddWithoutValidation(\"Authorization\",\"Bearer \"+apiKey);\nrequest.Headers.TryAddWithoutValidation(\"Accept\",\"application/json\");\nrequest.Headers.TryAddWithoutValidation(\"Idempotency-Key\",key);\nrequest.Content=new StringContent(\"{\\n  \\\"amount_minor\\\": 10000,\\n  \\\"external_reference\\\": \\\"pedido-123\\\",\\n  \\\"description\\\": \\\"Pagamento do pedido 123\\\",\\n  \\\"expires_in_seconds\\\": 3600,\\n  \\\"metadata\\\": {\\n    \\\"order_id\\\": \\\"123\\\"\\n  }\\n}\",Encoding.UTF8,\"application/json\");\nusing var response=await client.SendAsync(request);\nvar data=await response.Content.ReadAsStringAsync();\nif(!response.IsSuccessStatusCode) throw new Exception(data);\nConsole.WriteLine(data);\n// Em timeout de um POST, preserve a mesma intenção e concilie."
          },
          {
            "lang": "Ruby",
            "source": "# Ruby 3+ · biblioteca padrão\nrequire 'net/http'\nrequire 'uri'\nrequire 'json'\napi_key=ENV.fetch('ALTHA_API_KEY')\nkey=ENV.fetch('ALTHA_IDEMPOTENCY_KEY')\nuri=URI('https://api.althaone.com.br/api/v1/pix/charges')\nrequest=Net::HTTP::Post.new(uri)\nrequest['Authorization']='Bearer '+api_key\nrequest['Accept']='application/json'\nrequest['Content-Type']='application/json'\nrequest['Idempotency-Key']=key\nrequest.body=JSON.generate(JSON.parse('{\n  \"amount_minor\": 10000,\n  \"external_reference\": \"pedido-123\",\n  \"description\": \"Pagamento do pedido 123\",\n  \"expires_in_seconds\": 3600,\n  \"metadata\": {\n    \"order_id\": \"123\"\n  }\n}'))\nresponse=Net::HTTP.start(uri.hostname,uri.port,use_ssl:uri.scheme=='https',open_timeout:5,read_timeout:15) { |http| http.request(request) }\ndata=JSON.parse(response.body)\nraise JSON.generate(data) unless response.is_a?(Net::HTTPSuccess)\nputs JSON.pretty_generate(data)\n# Preserve a chave original em falhas de transporte."
          }
        ]
      },
      "get": {
        "summary": "Listar operações do próprio lojista",
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "external_reference",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1,
              "maximum": 10000
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de resultados, até 10000 páginas por filtro.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "external_reference": {
                            "type": "string"
                          },
                          "status": {
                            "enum": [
                              "PENDING",
                              "PAID",
                              "EXPIRED",
                              "CANCELLED",
                              "FAILED"
                            ]
                          },
                          "amount_minor": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "currency": {
                            "const": "BRL"
                          },
                          "created_at": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          },
                          "updated_at": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          },
                          "source": {
                            "enum": [
                              "API",
                              "AUTOMATIC_PAYOUT"
                            ]
                          },
                          "source_charge_id": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "error": {
                            "type": [
                              "object",
                              "null"
                            ]
                          },
                          "qr_copy_paste": {
                            "type": "string"
                          },
                          "qr_image": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Data URL PNG pronta para img src."
                          },
                          "expires_at": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          },
                          "paid_at": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          },
                          "automatic_payout": {
                            "const": true
                          },
                          "withdrawal": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "status": {
                                "type": "string"
                              }
                            }
                          },
                          "commercial": {
                            "type": "object",
                            "properties": {
                              "gross_minor": {
                                "type": "integer",
                                "minimum": 0
                              },
                              "fee_minor": {
                                "type": [
                                  "integer",
                                  "null"
                                ],
                                "minimum": 0
                              },
                              "net_minor": {
                                "type": [
                                  "integer",
                                  "null"
                                ],
                                "minimum": 0
                              },
                              "applied": {
                                "type": "boolean"
                              }
                            }
                          },
                          "metadata": {
                            "type": "object"
                          }
                        }
                      }
                    },
                    "page": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "limit": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "total": {
                      "type": "integer",
                      "minimum": 0
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "cURL",
            "source": "# LIVE. Guarde a chave no seu backend; não no navegador.\n# Consulta; nenhum novo movimento é criado.\ncurl --silent --show-error --fail-with-body --include --max-time 15 \\\n  --request GET 'https://api.althaone.com.br/api/v1/pix/charges' \\\n  --header \"Authorization: Bearer $ALTHA_API_KEY\" \\\n  --header 'Accept: application/json'"
          },
          {
            "lang": "Node.js",
            "source": "// Node.js 20+ · chave somente no backend\nconst apiKey = process.env.ALTHA_API_KEY;\nif (!apiKey) throw new Error('Configure ALTHA_API_KEY no servidor');\nconst response = await fetch(\"https://api.althaone.com.br/api/v1/pix/charges\", {\n  method: \"GET\",\n  headers: {\n    Authorization: 'Bearer ' + apiKey, Accept: 'application/json',\n  },\n  signal: AbortSignal.timeout(15000),\n});\nconst data = await response.json();\nif (!response.ok) throw new Error(JSON.stringify({http: response.status, ...data.error}));\nconsole.log(data);\n// Em falha de transporte, preserve a intenção; não troque a chave de um POST."
          },
          {
            "lang": "PHP",
            "source": "<?php\ndeclare(strict_types=1);\n$apiKey=getenv('ALTHA_API_KEY');\nif (!$apiKey) throw new RuntimeException('Configure a chave no servidor');\n$headers=['Authorization: Bearer '.$apiKey,'Accept: application/json'];\n$ch=curl_init('https://api.althaone.com.br/api/v1/pix/charges');\ncurl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'GET',\n  CURLOPT_HTTPHEADER=>$headers,CURLOPT_CONNECTTIMEOUT=>5,CURLOPT_TIMEOUT=>15,CURLOPT_FOLLOWLOCATION=>false]);\n$raw=curl_exec($ch);\nif ($raw===false) throw new RuntimeException('Comunicação incerta; preserve a intenção');\n$http=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);\n$data=json_decode($raw,true,512,JSON_THROW_ON_ERROR);\nif ($http<200||$http>=300) throw new RuntimeException(json_encode($data['error']??['http'=>$http]));\nprint_r($data);"
          },
          {
            "lang": "Python",
            "source": "# Python 3.10+ · biblioteca padrão\nimport os, json, urllib.request, urllib.error\napi_key = os.environ[\"ALTHA_API_KEY\"]\nheaders = {\"Authorization\": \"Bearer \" + api_key, \"Accept\": \"application/json\"}\npayload = None\nreq = urllib.request.Request(\"https://api.althaone.com.br/api/v1/pix/charges\", data=payload, headers=headers, method=\"GET\")\ntry:\n    with urllib.request.urlopen(req, timeout=15) as response:\n        print(json.loads(response.read()))\nexcept urllib.error.HTTPError as error:\n    data = json.loads(error.read())\n    print({\"http\": error.code, \"error\": data.get(\"error\")})\n    raise\nexcept urllib.error.URLError:\n    # Resultado de transporte incerto: consulte/reuse a MESMA intenção.\n    raise"
          },
          {
            "lang": "Go",
            "source": "// Go 1.20+ · biblioteca padrão\npackage main\nimport (\"bytes\"; \"fmt\"; \"io\"; \"net/http\"; \"os\"; \"time\")\nfunc main() {\n apiKey := os.Getenv(\"ALTHA_API_KEY\")\n if apiKey == \"\" { panic(\"Configure a chave no servidor\") }\n payload := []byte(\"\")\n req, err := http.NewRequest(\"GET\", \"https://api.althaone.com.br/api/v1/pix/charges\", bytes.NewReader(payload))\n if err != nil { panic(err) }\n req.Header.Set(\"Authorization\", \"Bearer \" + apiKey)\n req.Header.Set(\"Accept\", \"application/json\")\n client := &http.Client{Timeout:15*time.Second}\n response, err := client.Do(req)\n if err != nil { panic(\"Comunicação incerta: preserve a intenção original\") }\n defer response.Body.Close()\n data, err := io.ReadAll(response.Body)\n if err != nil { panic(err) }\n if response.StatusCode < 200 || response.StatusCode >= 300 { panic(string(data)) }\n fmt.Println(string(data))\n}"
          },
          {
            "lang": "Java",
            "source": "// Java 17+ · salve como PixExample.java\nimport java.net.URI;\nimport java.net.http.*;\nimport java.time.Duration;\npublic class PixExample {\n public static void main(String[] args) throws Exception {\n  String apiKey=System.getenv(\"ALTHA_API_KEY\");\n  if(apiKey==null||apiKey.isBlank()) throw new IllegalStateException(\"Configure a chave no servidor\");\n  HttpClient client=HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(5)).build();\n  HttpRequest request=HttpRequest.newBuilder(URI.create(\"https://api.althaone.com.br/api/v1/pix/charges\"))\n   .timeout(Duration.ofSeconds(15)).header(\"Authorization\",\"Bearer \"+apiKey).header(\"Accept\",\"application/json\")\n   .method(\"GET\",HttpRequest.BodyPublishers.noBody()).build();\n  HttpResponse<String> response=client.send(request,HttpResponse.BodyHandlers.ofString());\n  if(response.statusCode()<200||response.statusCode()>=300) throw new IllegalStateException(response.body());\n  System.out.println(response.body());\n }\n}"
          },
          {
            "lang": "C#",
            "source": "// C# · .NET 8+ · HttpClient padrão\nusing System;\nusing System.Net.Http;\nusing System.Text;\nvar apiKey=Environment.GetEnvironmentVariable(\"ALTHA_API_KEY\") ?? throw new Exception(\"Configure a chave no servidor\");\nusing var client=new HttpClient { Timeout=TimeSpan.FromSeconds(15) };\nusing var request=new HttpRequestMessage(new HttpMethod(\"GET\"), \"https://api.althaone.com.br/api/v1/pix/charges\");\nrequest.Headers.TryAddWithoutValidation(\"Authorization\",\"Bearer \"+apiKey);\nrequest.Headers.TryAddWithoutValidation(\"Accept\",\"application/json\");\nusing var response=await client.SendAsync(request);\nvar data=await response.Content.ReadAsStringAsync();\nif(!response.IsSuccessStatusCode) throw new Exception(data);\nConsole.WriteLine(data);\n// Em timeout de um POST, preserve a mesma intenção e concilie."
          },
          {
            "lang": "Ruby",
            "source": "# Ruby 3+ · biblioteca padrão\nrequire 'net/http'\nrequire 'uri'\nrequire 'json'\napi_key=ENV.fetch('ALTHA_API_KEY')\nuri=URI('https://api.althaone.com.br/api/v1/pix/charges')\nrequest=Net::HTTP::Get.new(uri)\nrequest['Authorization']='Bearer '+api_key\nrequest['Accept']='application/json'\nresponse=Net::HTTP.start(uri.hostname,uri.port,use_ssl:uri.scheme=='https',open_timeout:5,read_timeout:15) { |http| http.request(request) }\ndata=JSON.parse(response.body)\nraise JSON.generate(data) unless response.is_a?(Net::HTTPSuccess)\nputs JSON.pretty_generate(data)\n# Preserve a chave original em falhas de transporte."
          }
        ]
      }
    },
    "/charges/{id}": {
      "get": {
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operação do lojista",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "external_reference": {
                      "type": "string"
                    },
                    "status": {
                      "enum": [
                        "PENDING",
                        "PAID",
                        "EXPIRED",
                        "CANCELLED",
                        "FAILED"
                      ]
                    },
                    "amount_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "currency": {
                      "const": "BRL"
                    },
                    "created_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "updated_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "source": {
                      "enum": [
                        "API",
                        "AUTOMATIC_PAYOUT"
                      ]
                    },
                    "source_charge_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "error": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "qr_copy_paste": {
                      "type": "string"
                    },
                    "qr_image": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Data URL PNG pronta para img src."
                    },
                    "expires_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "paid_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "automatic_payout": {
                      "const": true
                    },
                    "withdrawal": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        }
                      }
                    },
                    "commercial": {
                      "type": "object",
                      "properties": {
                        "gross_minor": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "fee_minor": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "minimum": 0
                        },
                        "net_minor": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "minimum": 0
                        },
                        "applied": {
                          "type": "boolean"
                        }
                      }
                    },
                    "metadata": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-codeSamples": [
          {
            "lang": "cURL",
            "source": "# LIVE. Guarde a chave no seu backend; não no navegador.\n# Consulta; nenhum novo movimento é criado.\ncurl --silent --show-error --fail-with-body --include --max-time 15 \\\n  --request GET 'https://api.althaone.com.br/api/v1/pix/charges/11111111-1111-4111-8111-111111111111' \\\n  --header \"Authorization: Bearer $ALTHA_API_KEY\" \\\n  --header 'Accept: application/json'"
          },
          {
            "lang": "Node.js",
            "source": "// Node.js 20+ · chave somente no backend\nconst apiKey = process.env.ALTHA_API_KEY;\nif (!apiKey) throw new Error('Configure ALTHA_API_KEY no servidor');\nconst response = await fetch(\"https://api.althaone.com.br/api/v1/pix/charges/11111111-1111-4111-8111-111111111111\", {\n  method: \"GET\",\n  headers: {\n    Authorization: 'Bearer ' + apiKey, Accept: 'application/json',\n  },\n  signal: AbortSignal.timeout(15000),\n});\nconst data = await response.json();\nif (!response.ok) throw new Error(JSON.stringify({http: response.status, ...data.error}));\nconsole.log(data);\n// Em falha de transporte, preserve a intenção; não troque a chave de um POST."
          },
          {
            "lang": "PHP",
            "source": "<?php\ndeclare(strict_types=1);\n$apiKey=getenv('ALTHA_API_KEY');\nif (!$apiKey) throw new RuntimeException('Configure a chave no servidor');\n$headers=['Authorization: Bearer '.$apiKey,'Accept: application/json'];\n$ch=curl_init('https://api.althaone.com.br/api/v1/pix/charges/11111111-1111-4111-8111-111111111111');\ncurl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'GET',\n  CURLOPT_HTTPHEADER=>$headers,CURLOPT_CONNECTTIMEOUT=>5,CURLOPT_TIMEOUT=>15,CURLOPT_FOLLOWLOCATION=>false]);\n$raw=curl_exec($ch);\nif ($raw===false) throw new RuntimeException('Comunicação incerta; preserve a intenção');\n$http=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);\n$data=json_decode($raw,true,512,JSON_THROW_ON_ERROR);\nif ($http<200||$http>=300) throw new RuntimeException(json_encode($data['error']??['http'=>$http]));\nprint_r($data);"
          },
          {
            "lang": "Python",
            "source": "# Python 3.10+ · biblioteca padrão\nimport os, json, urllib.request, urllib.error\napi_key = os.environ[\"ALTHA_API_KEY\"]\nheaders = {\"Authorization\": \"Bearer \" + api_key, \"Accept\": \"application/json\"}\npayload = None\nreq = urllib.request.Request(\"https://api.althaone.com.br/api/v1/pix/charges/11111111-1111-4111-8111-111111111111\", data=payload, headers=headers, method=\"GET\")\ntry:\n    with urllib.request.urlopen(req, timeout=15) as response:\n        print(json.loads(response.read()))\nexcept urllib.error.HTTPError as error:\n    data = json.loads(error.read())\n    print({\"http\": error.code, \"error\": data.get(\"error\")})\n    raise\nexcept urllib.error.URLError:\n    # Resultado de transporte incerto: consulte/reuse a MESMA intenção.\n    raise"
          },
          {
            "lang": "Go",
            "source": "// Go 1.20+ · biblioteca padrão\npackage main\nimport (\"bytes\"; \"fmt\"; \"io\"; \"net/http\"; \"os\"; \"time\")\nfunc main() {\n apiKey := os.Getenv(\"ALTHA_API_KEY\")\n if apiKey == \"\" { panic(\"Configure a chave no servidor\") }\n payload := []byte(\"\")\n req, err := http.NewRequest(\"GET\", \"https://api.althaone.com.br/api/v1/pix/charges/11111111-1111-4111-8111-111111111111\", bytes.NewReader(payload))\n if err != nil { panic(err) }\n req.Header.Set(\"Authorization\", \"Bearer \" + apiKey)\n req.Header.Set(\"Accept\", \"application/json\")\n client := &http.Client{Timeout:15*time.Second}\n response, err := client.Do(req)\n if err != nil { panic(\"Comunicação incerta: preserve a intenção original\") }\n defer response.Body.Close()\n data, err := io.ReadAll(response.Body)\n if err != nil { panic(err) }\n if response.StatusCode < 200 || response.StatusCode >= 300 { panic(string(data)) }\n fmt.Println(string(data))\n}"
          },
          {
            "lang": "Java",
            "source": "// Java 17+ · salve como PixExample.java\nimport java.net.URI;\nimport java.net.http.*;\nimport java.time.Duration;\npublic class PixExample {\n public static void main(String[] args) throws Exception {\n  String apiKey=System.getenv(\"ALTHA_API_KEY\");\n  if(apiKey==null||apiKey.isBlank()) throw new IllegalStateException(\"Configure a chave no servidor\");\n  HttpClient client=HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(5)).build();\n  HttpRequest request=HttpRequest.newBuilder(URI.create(\"https://api.althaone.com.br/api/v1/pix/charges/11111111-1111-4111-8111-111111111111\"))\n   .timeout(Duration.ofSeconds(15)).header(\"Authorization\",\"Bearer \"+apiKey).header(\"Accept\",\"application/json\")\n   .method(\"GET\",HttpRequest.BodyPublishers.noBody()).build();\n  HttpResponse<String> response=client.send(request,HttpResponse.BodyHandlers.ofString());\n  if(response.statusCode()<200||response.statusCode()>=300) throw new IllegalStateException(response.body());\n  System.out.println(response.body());\n }\n}"
          },
          {
            "lang": "C#",
            "source": "// C# · .NET 8+ · HttpClient padrão\nusing System;\nusing System.Net.Http;\nusing System.Text;\nvar apiKey=Environment.GetEnvironmentVariable(\"ALTHA_API_KEY\") ?? throw new Exception(\"Configure a chave no servidor\");\nusing var client=new HttpClient { Timeout=TimeSpan.FromSeconds(15) };\nusing var request=new HttpRequestMessage(new HttpMethod(\"GET\"), \"https://api.althaone.com.br/api/v1/pix/charges/11111111-1111-4111-8111-111111111111\");\nrequest.Headers.TryAddWithoutValidation(\"Authorization\",\"Bearer \"+apiKey);\nrequest.Headers.TryAddWithoutValidation(\"Accept\",\"application/json\");\nusing var response=await client.SendAsync(request);\nvar data=await response.Content.ReadAsStringAsync();\nif(!response.IsSuccessStatusCode) throw new Exception(data);\nConsole.WriteLine(data);\n// Em timeout de um POST, preserve a mesma intenção e concilie."
          },
          {
            "lang": "Ruby",
            "source": "# Ruby 3+ · biblioteca padrão\nrequire 'net/http'\nrequire 'uri'\nrequire 'json'\napi_key=ENV.fetch('ALTHA_API_KEY')\nuri=URI('https://api.althaone.com.br/api/v1/pix/charges/11111111-1111-4111-8111-111111111111')\nrequest=Net::HTTP::Get.new(uri)\nrequest['Authorization']='Bearer '+api_key\nrequest['Accept']='application/json'\nresponse=Net::HTTP.start(uri.hostname,uri.port,use_ssl:uri.scheme=='https',open_timeout:5,read_timeout:15) { |http| http.request(request) }\ndata=JSON.parse(response.body)\nraise JSON.generate(data) unless response.is_a?(Net::HTTPSuccess)\nputs JSON.pretty_generate(data)\n# Preserve a chave original em falhas de transporte."
          }
        ]
      }
    },
    "/withdrawals": {
      "post": {
        "summary": "Solicitar saque para chave cadastrada",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{1,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "amount_minor",
                  "external_reference"
                ],
                "properties": {
                  "amount_minor": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2000000000
                  },
                  "external_reference": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 128
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Intenção persistida. Não significa pagamento ou saque concluído.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "external_reference": {
                      "type": "string"
                    },
                    "status": {
                      "enum": [
                        "QUEUED",
                        "PROCESSING",
                        "RECONCILING",
                        "COMPLETED",
                        "FAILED"
                      ]
                    },
                    "amount_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "currency": {
                      "const": "BRL"
                    },
                    "created_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "updated_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "source": {
                      "enum": [
                        "API",
                        "AUTOMATIC_PAYOUT"
                      ]
                    },
                    "source_charge_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "error": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "fee_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "total_debit_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "destination": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "completed_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "end_to_end_id": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Nulo quando não disponibilizado pela evidência persistida."
                    }
                  }
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-codeSamples": [
          {
            "lang": "cURL",
            "source": "# LIVE. Guarde a chave no seu backend; não no navegador.\n# Persista ALTHA_IDEMPOTENCY_KEY antes da chamada. Reutilize-a em timeout.\ncurl --silent --show-error --fail-with-body --include --max-time 15 \\\n  --request POST 'https://api.althaone.com.br/api/v1/pix/withdrawals' \\\n  --header \"Authorization: Bearer $ALTHA_API_KEY\" \\\n  --header 'Accept: application/json' \\\n  --header 'Content-Type: application/json' \\\n  --header \"Idempotency-Key: $ALTHA_IDEMPOTENCY_KEY\" \\\n  --data '{\n  \"amount_minor\": 5000,\n  \"external_reference\": \"saque-123\"\n}'"
          },
          {
            "lang": "Node.js",
            "source": "// Node.js 20+ · chave somente no backend\nconst apiKey = process.env.ALTHA_API_KEY;\nif (!apiKey) throw new Error('Configure ALTHA_API_KEY no servidor');\nconst key = process.env.ALTHA_IDEMPOTENCY_KEY;\nif (!key) throw new Error('Use a chave persistida da intenção');\nconst response = await fetch(\"https://api.althaone.com.br/api/v1/pix/withdrawals\", {\n  method: \"POST\",\n  headers: {\n    Authorization: 'Bearer ' + apiKey, Accept: 'application/json',\n    'Content-Type': 'application/json', 'Idempotency-Key': key,\n  },\n  signal: AbortSignal.timeout(15000),\n  body: JSON.stringify({\n  \"amount_minor\": 5000,\n  \"external_reference\": \"saque-123\"\n}),\n});\nconst data = await response.json();\nif (!response.ok) throw new Error(JSON.stringify({http: response.status, ...data.error}));\nconsole.log(data);\n// Em falha de transporte, preserve a intenção; não troque a chave de um POST."
          },
          {
            "lang": "PHP",
            "source": "<?php\ndeclare(strict_types=1);\n$apiKey=getenv('ALTHA_API_KEY');\nif (!$apiKey) throw new RuntimeException('Configure a chave no servidor');\n$key=getenv('ALTHA_IDEMPOTENCY_KEY');\nif (!$key) throw new RuntimeException('Use a chave persistida da intenção');\n$headers=['Authorization: Bearer '.$apiKey,'Accept: application/json'];\n$headers[]='Content-Type: application/json';\n$headers[]='Idempotency-Key: '.$key;\n$body=json_decode('{\n  \"amount_minor\": 5000,\n  \"external_reference\": \"saque-123\"\n}',true,512,JSON_THROW_ON_ERROR);\n$ch=curl_init('https://api.althaone.com.br/api/v1/pix/withdrawals');\ncurl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'POST',\n  CURLOPT_HTTPHEADER=>$headers,CURLOPT_CONNECTTIMEOUT=>5,CURLOPT_TIMEOUT=>15,CURLOPT_FOLLOWLOCATION=>false]);\ncurl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($body,JSON_THROW_ON_ERROR));\n$raw=curl_exec($ch);\nif ($raw===false) throw new RuntimeException('Comunicação incerta; preserve a intenção');\n$http=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);\n$data=json_decode($raw,true,512,JSON_THROW_ON_ERROR);\nif ($http<200||$http>=300) throw new RuntimeException(json_encode($data['error']??['http'=>$http]));\nprint_r($data);"
          },
          {
            "lang": "Python",
            "source": "# Python 3.10+ · biblioteca padrão\nimport os, json, urllib.request, urllib.error\napi_key = os.environ[\"ALTHA_API_KEY\"]\nkey = os.environ[\"ALTHA_IDEMPOTENCY_KEY\"]\nheaders = {\"Authorization\": \"Bearer \" + api_key, \"Accept\": \"application/json\"}\nheaders.update({\"Content-Type\": \"application/json\", \"Idempotency-Key\": key})\nbody = json.loads(\"{\\n  \\\"amount_minor\\\": 5000,\\n  \\\"external_reference\\\": \\\"saque-123\\\"\\n}\")\npayload = json.dumps(body).encode(\"utf-8\")\nreq = urllib.request.Request(\"https://api.althaone.com.br/api/v1/pix/withdrawals\", data=payload, headers=headers, method=\"POST\")\ntry:\n    with urllib.request.urlopen(req, timeout=15) as response:\n        print(json.loads(response.read()))\nexcept urllib.error.HTTPError as error:\n    data = json.loads(error.read())\n    print({\"http\": error.code, \"error\": data.get(\"error\")})\n    raise\nexcept urllib.error.URLError:\n    # Resultado de transporte incerto: consulte/reuse a MESMA intenção.\n    raise"
          },
          {
            "lang": "Go",
            "source": "// Go 1.20+ · biblioteca padrão\npackage main\nimport (\"bytes\"; \"fmt\"; \"io\"; \"net/http\"; \"os\"; \"time\")\nfunc main() {\n apiKey := os.Getenv(\"ALTHA_API_KEY\")\n if apiKey == \"\" { panic(\"Configure a chave no servidor\") }\n key := os.Getenv(\"ALTHA_IDEMPOTENCY_KEY\")\n if key == \"\" { panic(\"Use a chave persistida da intenção\") }\n payload := []byte(\"{\\n  \\\"amount_minor\\\": 5000,\\n  \\\"external_reference\\\": \\\"saque-123\\\"\\n}\")\n req, err := http.NewRequest(\"POST\", \"https://api.althaone.com.br/api/v1/pix/withdrawals\", bytes.NewReader(payload))\n if err != nil { panic(err) }\n req.Header.Set(\"Authorization\", \"Bearer \" + apiKey)\n req.Header.Set(\"Accept\", \"application/json\")\n req.Header.Set(\"Content-Type\", \"application/json\")\n req.Header.Set(\"Idempotency-Key\", key)\n client := &http.Client{Timeout:15*time.Second}\n response, err := client.Do(req)\n if err != nil { panic(\"Comunicação incerta: preserve a intenção original\") }\n defer response.Body.Close()\n data, err := io.ReadAll(response.Body)\n if err != nil { panic(err) }\n if response.StatusCode < 200 || response.StatusCode >= 300 { panic(string(data)) }\n fmt.Println(string(data))\n}"
          },
          {
            "lang": "Java",
            "source": "// Java 17+ · salve como PixExample.java\nimport java.net.URI;\nimport java.net.http.*;\nimport java.time.Duration;\npublic class PixExample {\n public static void main(String[] args) throws Exception {\n  String apiKey=System.getenv(\"ALTHA_API_KEY\");\n  if(apiKey==null||apiKey.isBlank()) throw new IllegalStateException(\"Configure a chave no servidor\");\n  String key=System.getenv(\"ALTHA_IDEMPOTENCY_KEY\");\n  if(key==null||key.isBlank()) throw new IllegalStateException(\"Use a chave persistida\");\n  HttpClient client=HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(5)).build();\n  HttpRequest request=HttpRequest.newBuilder(URI.create(\"https://api.althaone.com.br/api/v1/pix/withdrawals\"))\n   .timeout(Duration.ofSeconds(15)).header(\"Authorization\",\"Bearer \"+apiKey).header(\"Accept\",\"application/json\")\n   .header(\"Content-Type\",\"application/json\").header(\"Idempotency-Key\",key)\n   .method(\"POST\",HttpRequest.BodyPublishers.ofString(\"{\\n  \\\"amount_minor\\\": 5000,\\n  \\\"external_reference\\\": \\\"saque-123\\\"\\n}\")).build();\n  HttpResponse<String> response=client.send(request,HttpResponse.BodyHandlers.ofString());\n  if(response.statusCode()<200||response.statusCode()>=300) throw new IllegalStateException(response.body());\n  System.out.println(response.body());\n }\n}"
          },
          {
            "lang": "C#",
            "source": "// C# · .NET 8+ · HttpClient padrão\nusing System;\nusing System.Net.Http;\nusing System.Text;\nvar apiKey=Environment.GetEnvironmentVariable(\"ALTHA_API_KEY\") ?? throw new Exception(\"Configure a chave no servidor\");\nvar key=Environment.GetEnvironmentVariable(\"ALTHA_IDEMPOTENCY_KEY\") ?? throw new Exception(\"Use a chave persistida\");\nusing var client=new HttpClient { Timeout=TimeSpan.FromSeconds(15) };\nusing var request=new HttpRequestMessage(new HttpMethod(\"POST\"), \"https://api.althaone.com.br/api/v1/pix/withdrawals\");\nrequest.Headers.TryAddWithoutValidation(\"Authorization\",\"Bearer \"+apiKey);\nrequest.Headers.TryAddWithoutValidation(\"Accept\",\"application/json\");\nrequest.Headers.TryAddWithoutValidation(\"Idempotency-Key\",key);\nrequest.Content=new StringContent(\"{\\n  \\\"amount_minor\\\": 5000,\\n  \\\"external_reference\\\": \\\"saque-123\\\"\\n}\",Encoding.UTF8,\"application/json\");\nusing var response=await client.SendAsync(request);\nvar data=await response.Content.ReadAsStringAsync();\nif(!response.IsSuccessStatusCode) throw new Exception(data);\nConsole.WriteLine(data);\n// Em timeout de um POST, preserve a mesma intenção e concilie."
          },
          {
            "lang": "Ruby",
            "source": "# Ruby 3+ · biblioteca padrão\nrequire 'net/http'\nrequire 'uri'\nrequire 'json'\napi_key=ENV.fetch('ALTHA_API_KEY')\nkey=ENV.fetch('ALTHA_IDEMPOTENCY_KEY')\nuri=URI('https://api.althaone.com.br/api/v1/pix/withdrawals')\nrequest=Net::HTTP::Post.new(uri)\nrequest['Authorization']='Bearer '+api_key\nrequest['Accept']='application/json'\nrequest['Content-Type']='application/json'\nrequest['Idempotency-Key']=key\nrequest.body=JSON.generate(JSON.parse('{\n  \"amount_minor\": 5000,\n  \"external_reference\": \"saque-123\"\n}'))\nresponse=Net::HTTP.start(uri.hostname,uri.port,use_ssl:uri.scheme=='https',open_timeout:5,read_timeout:15) { |http| http.request(request) }\ndata=JSON.parse(response.body)\nraise JSON.generate(data) unless response.is_a?(Net::HTTPSuccess)\nputs JSON.pretty_generate(data)\n# Preserve a chave original em falhas de transporte."
          }
        ]
      },
      "get": {
        "summary": "Listar operações do próprio lojista",
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "external_reference",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1,
              "maximum": 10000
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de resultados, até 10000 páginas por filtro.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "external_reference": {
                            "type": "string"
                          },
                          "status": {
                            "enum": [
                              "QUEUED",
                              "PROCESSING",
                              "RECONCILING",
                              "COMPLETED",
                              "FAILED"
                            ]
                          },
                          "amount_minor": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "currency": {
                            "const": "BRL"
                          },
                          "created_at": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          },
                          "updated_at": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          },
                          "source": {
                            "enum": [
                              "API",
                              "AUTOMATIC_PAYOUT"
                            ]
                          },
                          "source_charge_id": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "error": {
                            "type": [
                              "object",
                              "null"
                            ]
                          },
                          "fee_minor": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "total_debit_minor": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "destination": {
                            "type": [
                              "object",
                              "null"
                            ]
                          },
                          "completed_at": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          },
                          "end_to_end_id": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Nulo quando não disponibilizado pela evidência persistida."
                          }
                        }
                      }
                    },
                    "page": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "limit": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "total": {
                      "type": "integer",
                      "minimum": 0
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "cURL",
            "source": "# LIVE. Guarde a chave no seu backend; não no navegador.\n# Consulta; nenhum novo movimento é criado.\ncurl --silent --show-error --fail-with-body --include --max-time 15 \\\n  --request GET 'https://api.althaone.com.br/api/v1/pix/withdrawals' \\\n  --header \"Authorization: Bearer $ALTHA_API_KEY\" \\\n  --header 'Accept: application/json'"
          },
          {
            "lang": "Node.js",
            "source": "// Node.js 20+ · chave somente no backend\nconst apiKey = process.env.ALTHA_API_KEY;\nif (!apiKey) throw new Error('Configure ALTHA_API_KEY no servidor');\nconst response = await fetch(\"https://api.althaone.com.br/api/v1/pix/withdrawals\", {\n  method: \"GET\",\n  headers: {\n    Authorization: 'Bearer ' + apiKey, Accept: 'application/json',\n  },\n  signal: AbortSignal.timeout(15000),\n});\nconst data = await response.json();\nif (!response.ok) throw new Error(JSON.stringify({http: response.status, ...data.error}));\nconsole.log(data);\n// Em falha de transporte, preserve a intenção; não troque a chave de um POST."
          },
          {
            "lang": "PHP",
            "source": "<?php\ndeclare(strict_types=1);\n$apiKey=getenv('ALTHA_API_KEY');\nif (!$apiKey) throw new RuntimeException('Configure a chave no servidor');\n$headers=['Authorization: Bearer '.$apiKey,'Accept: application/json'];\n$ch=curl_init('https://api.althaone.com.br/api/v1/pix/withdrawals');\ncurl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'GET',\n  CURLOPT_HTTPHEADER=>$headers,CURLOPT_CONNECTTIMEOUT=>5,CURLOPT_TIMEOUT=>15,CURLOPT_FOLLOWLOCATION=>false]);\n$raw=curl_exec($ch);\nif ($raw===false) throw new RuntimeException('Comunicação incerta; preserve a intenção');\n$http=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);\n$data=json_decode($raw,true,512,JSON_THROW_ON_ERROR);\nif ($http<200||$http>=300) throw new RuntimeException(json_encode($data['error']??['http'=>$http]));\nprint_r($data);"
          },
          {
            "lang": "Python",
            "source": "# Python 3.10+ · biblioteca padrão\nimport os, json, urllib.request, urllib.error\napi_key = os.environ[\"ALTHA_API_KEY\"]\nheaders = {\"Authorization\": \"Bearer \" + api_key, \"Accept\": \"application/json\"}\npayload = None\nreq = urllib.request.Request(\"https://api.althaone.com.br/api/v1/pix/withdrawals\", data=payload, headers=headers, method=\"GET\")\ntry:\n    with urllib.request.urlopen(req, timeout=15) as response:\n        print(json.loads(response.read()))\nexcept urllib.error.HTTPError as error:\n    data = json.loads(error.read())\n    print({\"http\": error.code, \"error\": data.get(\"error\")})\n    raise\nexcept urllib.error.URLError:\n    # Resultado de transporte incerto: consulte/reuse a MESMA intenção.\n    raise"
          },
          {
            "lang": "Go",
            "source": "// Go 1.20+ · biblioteca padrão\npackage main\nimport (\"bytes\"; \"fmt\"; \"io\"; \"net/http\"; \"os\"; \"time\")\nfunc main() {\n apiKey := os.Getenv(\"ALTHA_API_KEY\")\n if apiKey == \"\" { panic(\"Configure a chave no servidor\") }\n payload := []byte(\"\")\n req, err := http.NewRequest(\"GET\", \"https://api.althaone.com.br/api/v1/pix/withdrawals\", bytes.NewReader(payload))\n if err != nil { panic(err) }\n req.Header.Set(\"Authorization\", \"Bearer \" + apiKey)\n req.Header.Set(\"Accept\", \"application/json\")\n client := &http.Client{Timeout:15*time.Second}\n response, err := client.Do(req)\n if err != nil { panic(\"Comunicação incerta: preserve a intenção original\") }\n defer response.Body.Close()\n data, err := io.ReadAll(response.Body)\n if err != nil { panic(err) }\n if response.StatusCode < 200 || response.StatusCode >= 300 { panic(string(data)) }\n fmt.Println(string(data))\n}"
          },
          {
            "lang": "Java",
            "source": "// Java 17+ · salve como PixExample.java\nimport java.net.URI;\nimport java.net.http.*;\nimport java.time.Duration;\npublic class PixExample {\n public static void main(String[] args) throws Exception {\n  String apiKey=System.getenv(\"ALTHA_API_KEY\");\n  if(apiKey==null||apiKey.isBlank()) throw new IllegalStateException(\"Configure a chave no servidor\");\n  HttpClient client=HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(5)).build();\n  HttpRequest request=HttpRequest.newBuilder(URI.create(\"https://api.althaone.com.br/api/v1/pix/withdrawals\"))\n   .timeout(Duration.ofSeconds(15)).header(\"Authorization\",\"Bearer \"+apiKey).header(\"Accept\",\"application/json\")\n   .method(\"GET\",HttpRequest.BodyPublishers.noBody()).build();\n  HttpResponse<String> response=client.send(request,HttpResponse.BodyHandlers.ofString());\n  if(response.statusCode()<200||response.statusCode()>=300) throw new IllegalStateException(response.body());\n  System.out.println(response.body());\n }\n}"
          },
          {
            "lang": "C#",
            "source": "// C# · .NET 8+ · HttpClient padrão\nusing System;\nusing System.Net.Http;\nusing System.Text;\nvar apiKey=Environment.GetEnvironmentVariable(\"ALTHA_API_KEY\") ?? throw new Exception(\"Configure a chave no servidor\");\nusing var client=new HttpClient { Timeout=TimeSpan.FromSeconds(15) };\nusing var request=new HttpRequestMessage(new HttpMethod(\"GET\"), \"https://api.althaone.com.br/api/v1/pix/withdrawals\");\nrequest.Headers.TryAddWithoutValidation(\"Authorization\",\"Bearer \"+apiKey);\nrequest.Headers.TryAddWithoutValidation(\"Accept\",\"application/json\");\nusing var response=await client.SendAsync(request);\nvar data=await response.Content.ReadAsStringAsync();\nif(!response.IsSuccessStatusCode) throw new Exception(data);\nConsole.WriteLine(data);\n// Em timeout de um POST, preserve a mesma intenção e concilie."
          },
          {
            "lang": "Ruby",
            "source": "# Ruby 3+ · biblioteca padrão\nrequire 'net/http'\nrequire 'uri'\nrequire 'json'\napi_key=ENV.fetch('ALTHA_API_KEY')\nuri=URI('https://api.althaone.com.br/api/v1/pix/withdrawals')\nrequest=Net::HTTP::Get.new(uri)\nrequest['Authorization']='Bearer '+api_key\nrequest['Accept']='application/json'\nresponse=Net::HTTP.start(uri.hostname,uri.port,use_ssl:uri.scheme=='https',open_timeout:5,read_timeout:15) { |http| http.request(request) }\ndata=JSON.parse(response.body)\nraise JSON.generate(data) unless response.is_a?(Net::HTTPSuccess)\nputs JSON.pretty_generate(data)\n# Preserve a chave original em falhas de transporte."
          }
        ]
      }
    },
    "/withdrawals/{id}": {
      "get": {
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operação do lojista",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "external_reference": {
                      "type": "string"
                    },
                    "status": {
                      "enum": [
                        "QUEUED",
                        "PROCESSING",
                        "RECONCILING",
                        "COMPLETED",
                        "FAILED"
                      ]
                    },
                    "amount_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "currency": {
                      "const": "BRL"
                    },
                    "created_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "updated_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "source": {
                      "enum": [
                        "API",
                        "AUTOMATIC_PAYOUT"
                      ]
                    },
                    "source_charge_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "error": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "fee_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "total_debit_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "destination": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "completed_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "end_to_end_id": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Nulo quando não disponibilizado pela evidência persistida."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-codeSamples": [
          {
            "lang": "cURL",
            "source": "# LIVE. Guarde a chave no seu backend; não no navegador.\n# Consulta; nenhum novo movimento é criado.\ncurl --silent --show-error --fail-with-body --include --max-time 15 \\\n  --request GET 'https://api.althaone.com.br/api/v1/pix/withdrawals/22222222-2222-4222-8222-222222222222' \\\n  --header \"Authorization: Bearer $ALTHA_API_KEY\" \\\n  --header 'Accept: application/json'"
          },
          {
            "lang": "Node.js",
            "source": "// Node.js 20+ · chave somente no backend\nconst apiKey = process.env.ALTHA_API_KEY;\nif (!apiKey) throw new Error('Configure ALTHA_API_KEY no servidor');\nconst response = await fetch(\"https://api.althaone.com.br/api/v1/pix/withdrawals/22222222-2222-4222-8222-222222222222\", {\n  method: \"GET\",\n  headers: {\n    Authorization: 'Bearer ' + apiKey, Accept: 'application/json',\n  },\n  signal: AbortSignal.timeout(15000),\n});\nconst data = await response.json();\nif (!response.ok) throw new Error(JSON.stringify({http: response.status, ...data.error}));\nconsole.log(data);\n// Em falha de transporte, preserve a intenção; não troque a chave de um POST."
          },
          {
            "lang": "PHP",
            "source": "<?php\ndeclare(strict_types=1);\n$apiKey=getenv('ALTHA_API_KEY');\nif (!$apiKey) throw new RuntimeException('Configure a chave no servidor');\n$headers=['Authorization: Bearer '.$apiKey,'Accept: application/json'];\n$ch=curl_init('https://api.althaone.com.br/api/v1/pix/withdrawals/22222222-2222-4222-8222-222222222222');\ncurl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'GET',\n  CURLOPT_HTTPHEADER=>$headers,CURLOPT_CONNECTTIMEOUT=>5,CURLOPT_TIMEOUT=>15,CURLOPT_FOLLOWLOCATION=>false]);\n$raw=curl_exec($ch);\nif ($raw===false) throw new RuntimeException('Comunicação incerta; preserve a intenção');\n$http=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);\n$data=json_decode($raw,true,512,JSON_THROW_ON_ERROR);\nif ($http<200||$http>=300) throw new RuntimeException(json_encode($data['error']??['http'=>$http]));\nprint_r($data);"
          },
          {
            "lang": "Python",
            "source": "# Python 3.10+ · biblioteca padrão\nimport os, json, urllib.request, urllib.error\napi_key = os.environ[\"ALTHA_API_KEY\"]\nheaders = {\"Authorization\": \"Bearer \" + api_key, \"Accept\": \"application/json\"}\npayload = None\nreq = urllib.request.Request(\"https://api.althaone.com.br/api/v1/pix/withdrawals/22222222-2222-4222-8222-222222222222\", data=payload, headers=headers, method=\"GET\")\ntry:\n    with urllib.request.urlopen(req, timeout=15) as response:\n        print(json.loads(response.read()))\nexcept urllib.error.HTTPError as error:\n    data = json.loads(error.read())\n    print({\"http\": error.code, \"error\": data.get(\"error\")})\n    raise\nexcept urllib.error.URLError:\n    # Resultado de transporte incerto: consulte/reuse a MESMA intenção.\n    raise"
          },
          {
            "lang": "Go",
            "source": "// Go 1.20+ · biblioteca padrão\npackage main\nimport (\"bytes\"; \"fmt\"; \"io\"; \"net/http\"; \"os\"; \"time\")\nfunc main() {\n apiKey := os.Getenv(\"ALTHA_API_KEY\")\n if apiKey == \"\" { panic(\"Configure a chave no servidor\") }\n payload := []byte(\"\")\n req, err := http.NewRequest(\"GET\", \"https://api.althaone.com.br/api/v1/pix/withdrawals/22222222-2222-4222-8222-222222222222\", bytes.NewReader(payload))\n if err != nil { panic(err) }\n req.Header.Set(\"Authorization\", \"Bearer \" + apiKey)\n req.Header.Set(\"Accept\", \"application/json\")\n client := &http.Client{Timeout:15*time.Second}\n response, err := client.Do(req)\n if err != nil { panic(\"Comunicação incerta: preserve a intenção original\") }\n defer response.Body.Close()\n data, err := io.ReadAll(response.Body)\n if err != nil { panic(err) }\n if response.StatusCode < 200 || response.StatusCode >= 300 { panic(string(data)) }\n fmt.Println(string(data))\n}"
          },
          {
            "lang": "Java",
            "source": "// Java 17+ · salve como PixExample.java\nimport java.net.URI;\nimport java.net.http.*;\nimport java.time.Duration;\npublic class PixExample {\n public static void main(String[] args) throws Exception {\n  String apiKey=System.getenv(\"ALTHA_API_KEY\");\n  if(apiKey==null||apiKey.isBlank()) throw new IllegalStateException(\"Configure a chave no servidor\");\n  HttpClient client=HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(5)).build();\n  HttpRequest request=HttpRequest.newBuilder(URI.create(\"https://api.althaone.com.br/api/v1/pix/withdrawals/22222222-2222-4222-8222-222222222222\"))\n   .timeout(Duration.ofSeconds(15)).header(\"Authorization\",\"Bearer \"+apiKey).header(\"Accept\",\"application/json\")\n   .method(\"GET\",HttpRequest.BodyPublishers.noBody()).build();\n  HttpResponse<String> response=client.send(request,HttpResponse.BodyHandlers.ofString());\n  if(response.statusCode()<200||response.statusCode()>=300) throw new IllegalStateException(response.body());\n  System.out.println(response.body());\n }\n}"
          },
          {
            "lang": "C#",
            "source": "// C# · .NET 8+ · HttpClient padrão\nusing System;\nusing System.Net.Http;\nusing System.Text;\nvar apiKey=Environment.GetEnvironmentVariable(\"ALTHA_API_KEY\") ?? throw new Exception(\"Configure a chave no servidor\");\nusing var client=new HttpClient { Timeout=TimeSpan.FromSeconds(15) };\nusing var request=new HttpRequestMessage(new HttpMethod(\"GET\"), \"https://api.althaone.com.br/api/v1/pix/withdrawals/22222222-2222-4222-8222-222222222222\");\nrequest.Headers.TryAddWithoutValidation(\"Authorization\",\"Bearer \"+apiKey);\nrequest.Headers.TryAddWithoutValidation(\"Accept\",\"application/json\");\nusing var response=await client.SendAsync(request);\nvar data=await response.Content.ReadAsStringAsync();\nif(!response.IsSuccessStatusCode) throw new Exception(data);\nConsole.WriteLine(data);\n// Em timeout de um POST, preserve a mesma intenção e concilie."
          },
          {
            "lang": "Ruby",
            "source": "# Ruby 3+ · biblioteca padrão\nrequire 'net/http'\nrequire 'uri'\nrequire 'json'\napi_key=ENV.fetch('ALTHA_API_KEY')\nuri=URI('https://api.althaone.com.br/api/v1/pix/withdrawals/22222222-2222-4222-8222-222222222222')\nrequest=Net::HTTP::Get.new(uri)\nrequest['Authorization']='Bearer '+api_key\nrequest['Accept']='application/json'\nresponse=Net::HTTP.start(uri.hostname,uri.port,use_ssl:uri.scheme=='https',open_timeout:5,read_timeout:15) { |http| http.request(request) }\ndata=JSON.parse(response.body)\nraise JSON.generate(data) unless response.is_a?(Net::HTTPSuccess)\nputs JSON.pretty_generate(data)\n# Preserve a chave original em falhas de transporte."
          }
        ]
      }
    },
    "/balance": {
      "get": {
        "responses": {
          "200": {
            "description": "Carteira interna, nunca saldo da conta central.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "currency": {
                      "const": "BRL"
                    },
                    "available_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "reserved_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "contractual_reserve_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "other_pending_minor": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "updated_at": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "cURL",
            "source": "# LIVE. Guarde a chave no seu backend; não no navegador.\n# Consulta; nenhum novo movimento é criado.\ncurl --silent --show-error --fail-with-body --include --max-time 15 \\\n  --request GET 'https://api.althaone.com.br/api/v1/pix/balance' \\\n  --header \"Authorization: Bearer $ALTHA_API_KEY\" \\\n  --header 'Accept: application/json'"
          },
          {
            "lang": "Node.js",
            "source": "// Node.js 20+ · chave somente no backend\nconst apiKey = process.env.ALTHA_API_KEY;\nif (!apiKey) throw new Error('Configure ALTHA_API_KEY no servidor');\nconst response = await fetch(\"https://api.althaone.com.br/api/v1/pix/balance\", {\n  method: \"GET\",\n  headers: {\n    Authorization: 'Bearer ' + apiKey, Accept: 'application/json',\n  },\n  signal: AbortSignal.timeout(15000),\n});\nconst data = await response.json();\nif (!response.ok) throw new Error(JSON.stringify({http: response.status, ...data.error}));\nconsole.log(data);\n// Em falha de transporte, preserve a intenção; não troque a chave de um POST."
          },
          {
            "lang": "PHP",
            "source": "<?php\ndeclare(strict_types=1);\n$apiKey=getenv('ALTHA_API_KEY');\nif (!$apiKey) throw new RuntimeException('Configure a chave no servidor');\n$headers=['Authorization: Bearer '.$apiKey,'Accept: application/json'];\n$ch=curl_init('https://api.althaone.com.br/api/v1/pix/balance');\ncurl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'GET',\n  CURLOPT_HTTPHEADER=>$headers,CURLOPT_CONNECTTIMEOUT=>5,CURLOPT_TIMEOUT=>15,CURLOPT_FOLLOWLOCATION=>false]);\n$raw=curl_exec($ch);\nif ($raw===false) throw new RuntimeException('Comunicação incerta; preserve a intenção');\n$http=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);\n$data=json_decode($raw,true,512,JSON_THROW_ON_ERROR);\nif ($http<200||$http>=300) throw new RuntimeException(json_encode($data['error']??['http'=>$http]));\nprint_r($data);"
          },
          {
            "lang": "Python",
            "source": "# Python 3.10+ · biblioteca padrão\nimport os, json, urllib.request, urllib.error\napi_key = os.environ[\"ALTHA_API_KEY\"]\nheaders = {\"Authorization\": \"Bearer \" + api_key, \"Accept\": \"application/json\"}\npayload = None\nreq = urllib.request.Request(\"https://api.althaone.com.br/api/v1/pix/balance\", data=payload, headers=headers, method=\"GET\")\ntry:\n    with urllib.request.urlopen(req, timeout=15) as response:\n        print(json.loads(response.read()))\nexcept urllib.error.HTTPError as error:\n    data = json.loads(error.read())\n    print({\"http\": error.code, \"error\": data.get(\"error\")})\n    raise\nexcept urllib.error.URLError:\n    # Resultado de transporte incerto: consulte/reuse a MESMA intenção.\n    raise"
          },
          {
            "lang": "Go",
            "source": "// Go 1.20+ · biblioteca padrão\npackage main\nimport (\"bytes\"; \"fmt\"; \"io\"; \"net/http\"; \"os\"; \"time\")\nfunc main() {\n apiKey := os.Getenv(\"ALTHA_API_KEY\")\n if apiKey == \"\" { panic(\"Configure a chave no servidor\") }\n payload := []byte(\"\")\n req, err := http.NewRequest(\"GET\", \"https://api.althaone.com.br/api/v1/pix/balance\", bytes.NewReader(payload))\n if err != nil { panic(err) }\n req.Header.Set(\"Authorization\", \"Bearer \" + apiKey)\n req.Header.Set(\"Accept\", \"application/json\")\n client := &http.Client{Timeout:15*time.Second}\n response, err := client.Do(req)\n if err != nil { panic(\"Comunicação incerta: preserve a intenção original\") }\n defer response.Body.Close()\n data, err := io.ReadAll(response.Body)\n if err != nil { panic(err) }\n if response.StatusCode < 200 || response.StatusCode >= 300 { panic(string(data)) }\n fmt.Println(string(data))\n}"
          },
          {
            "lang": "Java",
            "source": "// Java 17+ · salve como PixExample.java\nimport java.net.URI;\nimport java.net.http.*;\nimport java.time.Duration;\npublic class PixExample {\n public static void main(String[] args) throws Exception {\n  String apiKey=System.getenv(\"ALTHA_API_KEY\");\n  if(apiKey==null||apiKey.isBlank()) throw new IllegalStateException(\"Configure a chave no servidor\");\n  HttpClient client=HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(5)).build();\n  HttpRequest request=HttpRequest.newBuilder(URI.create(\"https://api.althaone.com.br/api/v1/pix/balance\"))\n   .timeout(Duration.ofSeconds(15)).header(\"Authorization\",\"Bearer \"+apiKey).header(\"Accept\",\"application/json\")\n   .method(\"GET\",HttpRequest.BodyPublishers.noBody()).build();\n  HttpResponse<String> response=client.send(request,HttpResponse.BodyHandlers.ofString());\n  if(response.statusCode()<200||response.statusCode()>=300) throw new IllegalStateException(response.body());\n  System.out.println(response.body());\n }\n}"
          },
          {
            "lang": "C#",
            "source": "// C# · .NET 8+ · HttpClient padrão\nusing System;\nusing System.Net.Http;\nusing System.Text;\nvar apiKey=Environment.GetEnvironmentVariable(\"ALTHA_API_KEY\") ?? throw new Exception(\"Configure a chave no servidor\");\nusing var client=new HttpClient { Timeout=TimeSpan.FromSeconds(15) };\nusing var request=new HttpRequestMessage(new HttpMethod(\"GET\"), \"https://api.althaone.com.br/api/v1/pix/balance\");\nrequest.Headers.TryAddWithoutValidation(\"Authorization\",\"Bearer \"+apiKey);\nrequest.Headers.TryAddWithoutValidation(\"Accept\",\"application/json\");\nusing var response=await client.SendAsync(request);\nvar data=await response.Content.ReadAsStringAsync();\nif(!response.IsSuccessStatusCode) throw new Exception(data);\nConsole.WriteLine(data);\n// Em timeout de um POST, preserve a mesma intenção e concilie."
          },
          {
            "lang": "Ruby",
            "source": "# Ruby 3+ · biblioteca padrão\nrequire 'net/http'\nrequire 'uri'\nrequire 'json'\napi_key=ENV.fetch('ALTHA_API_KEY')\nuri=URI('https://api.althaone.com.br/api/v1/pix/balance')\nrequest=Net::HTTP::Get.new(uri)\nrequest['Authorization']='Bearer '+api_key\nrequest['Accept']='application/json'\nresponse=Net::HTTP.start(uri.hostname,uri.port,use_ssl:uri.scheme=='https',open_timeout:5,read_timeout:15) { |http| http.request(request) }\ndata=JSON.parse(response.body)\nraise JSON.generate(data) unless response.is_a?(Net::HTTPSuccess)\nputs JSON.pretty_generate(data)\n# Preserve a chave original em falhas de transporte."
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Chave Altha One, exibida somente na criação."
      }
    },
    "responses": {
      "Error": {
        "description": "Falha técnica ou de validação",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "request_id": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}