{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-@l10n/en-US/guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Going to Production","description":"Documentação oficial da API da plataforma de crédito embarcado Dinie. Integre produtos de crédito diretamente na sua aplicação.","siteUrl":"https://docs.dinie.com","lang":"pt-BR","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"going-to-production","__idx":0},"children":["Going to Production"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When your integration is working in sandbox, use this checklist to prepare for your production launch."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"production-checklist","__idx":1},"children":["Production Checklist"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"credentials-and-security","__idx":2},"children":["Credentials and Security"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Production credentials"]}," — Request production credentials from your account manager. Sandbox credentials do not work in production."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Secrets storage"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_secret"]}," and webhook secrets are stored in a secrets manager (not in code or hardcoded environment variables)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Server-side calls"]}," — All API calls are made from your backend. No credentials are exposed on the frontend."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Planned rotation"]}," — Define a process for ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/en-us/apis/concepts/authentication#gerenciamento-de-credenciais"},"children":["credential rotation"]}," every 90 days."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"resilience","__idx":3},"children":["Resilience"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Idempotency on POSTs"]}," — The SDKs automatically generate an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Idempotency-Key"]}," on every ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}," request, ensuring safety on retries. If using cURL/HTTP directly, include the header manually."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Retry with backoff"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["500"]}," errors are retried with exponential backoff and jitter. The SDKs handle this automatically."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["401 handling"]}," — Your client automatically renews the token upon receiving a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401"]}," with code ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["token_expired"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Validation errors"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422"]}," errors are handled by displaying the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["detail"]}," (human-readable message) and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["code"]}," (machine-readable sub-type) fields from the Problem Details (RFC 9457) response to the user."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"webhooks","__idx":4},"children":["Webhooks"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Signature verification"]}," — Every webhook delivery is verified with HMAC-SHA256 before processing. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/en-us/apis/concepts/webhooks#verifica%C3%A7%C3%A3o-manual-de-assinatura"},"children":["Webhooks"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Handler idempotency"]}," — Your handler uses ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhook-id"]}," as a deduplication key. The same event may be delivered more than once."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Fast response"]}," — The handler returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200"]}," within 15 seconds and processes the event asynchronously."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replay protection"]}," — Webhooks with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhook-timestamp"]}," older than 5 minutes are rejected."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"monitoring","__idx":5},"children":["Monitoring"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Error alerts"]}," — Monitor ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["5xx"]}," responses and webhook failures."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rate limit tracking"]}," — Monitor the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-RateLimit-Remaining"]}," headers to avoid throttling."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Customer status"]}," — Track customers stuck in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pending_kyc"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["under_review"]}," for excessive periods."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"production-urls","__idx":6},"children":["Production URLs"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Environment"},"children":["Environment"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Base URL"},"children":["Base URL"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sandbox"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://sandbox.api.dinie.com.br/v3"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Production"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.dinie.com.br/v3"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Update the base URL and credentials. The API is identical in both environments."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"support","__idx":7},"children":["Support"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Email:"]}," api@dinie.com.br"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Status:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://status.dinie.com.br"},"children":["status.dinie.com.br"]}]}]}]},"headings":[{"value":"Going to Production","id":"going-to-production","depth":1},{"value":"Production Checklist","id":"production-checklist","depth":2},{"value":"Credentials and Security","id":"credentials-and-security","depth":3},{"value":"Resilience","id":"resilience","depth":3},{"value":"Webhooks","id":"webhooks","depth":3},{"value":"Monitoring","id":"monitoring","depth":3},{"value":"Production URLs","id":"production-urls","depth":2},{"value":"Support","id":"support","depth":2}],"frontmatter":{"seo":{"title":"Going to Production"}},"lastModified":"2026-03-15T13:30:00.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/en-us/guides/going-to-production","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}