DOCS · EXEMPLOS

Exemplos de código em 4 linguagens

cURL, TypeScript, Python e Go pros 5 endpoints. Sem SDK fictício — apenas stdlib + fetch / requests / net/http. Copia, cola, troca a API key e roda.

ÍNDICE

Endpoints e linguagens

5 endpoints × 4 linguagens = 20 snippets. Clica em qualquer célula pra pular direto pro code block correspondente.

POST /v1/validate/tax-ids

Tax IDs — validação de tax IDs em lote

Referência completa
cURL
curl -X POST https://api.normadata.io/v1/validate/tax-ids \
  -H "X-API-Key: $NORMADATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":[
    {"id":"a","value":"20-12345678-6","country":"AR","type":"cuit"},
    {"id":"b","value":"123.456.789-09","country":"BR"}
  ]}'
TypeScript
const res = await fetch("https://api.normadata.io/v1/validate/tax-ids", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.NORMADATA_API_KEY!,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    items: [
      { id: "a", value: "20-12345678-6", country: "AR", type: "cuit" },
      { id: "b", value: "123.456.789-09", country: "BR" },
    ],
  }),
});

const { results } = await res.json();
for (const r of results) console.log(r.id, r.valid, r.normalized);
Python
import os
import requests

res = requests.post(
    "https://api.normadata.io/v1/validate/tax-ids",
    headers={
        "X-API-Key": os.environ["NORMADATA_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
        "items": [
            {"id": "a", "value": "20-12345678-6", "country": "AR", "type": "cuit"},
            {"id": "b", "value": "123.456.789-09", "country": "BR"},
        ],
    },
    timeout=10,
)
for r in res.json()["results"]:
    print(r["id"], r["valid"], r.get("normalized"))
Go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"os"
)

type TaxIDItem struct {
	ID      string `json:"id"`
	Value   string `json:"value"`
	Country string `json:"country"`
	Type    string `json:"type,omitempty"`
}

type TaxIDResult struct {
	ID         string `json:"id"`
	Valid      bool   `json:"valid"`
	Normalized string `json:"normalized"`
}

func main() {
	body, _ := json.Marshal(map[string]any{
		"items": []TaxIDItem{
			{ID: "a", Value: "20-12345678-6", Country: "AR", Type: "cuit"},
			{ID: "b", Value: "123.456.789-09", Country: "BR"},
		},
	})
	req, _ := http.NewRequest("POST", "https://api.normadata.io/v1/validate/tax-ids", bytes.NewReader(body))
	req.Header.Set("X-API-Key", os.Getenv("NORMADATA_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()

	var out struct {
		Results []TaxIDResult `json:"results"`
	}
	json.NewDecoder(res.Body).Decode(&out)
	for _, r := range out.Results {
		fmt.Println(r.ID, r.Valid, r.Normalized)
	}
}
POST /v1/validate/accounts

Contas — validação bancária em lote

Referência completa
cURL
curl -X POST https://api.normadata.io/v1/validate/accounts \
  -H "X-API-Key: $NORMADATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":[
    {"id":"1","value":"0170010600000123456780","country":"AR","type":"cbu"},
    {"id":"2","value":"DE89370400440532013000","country":"DE","type":"iban"}
  ]}'
TypeScript
const res = await fetch("https://api.normadata.io/v1/validate/accounts", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.NORMADATA_API_KEY!,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    items: [
      { id: "1", value: "0170010600000123456780", country: "AR", type: "cbu" },
      { id: "2", value: "DE89370400440532013000", country: "DE", type: "iban" },
    ],
  }),
});

const { results } = await res.json();
for (const r of results) console.log(r.id, r.checksum_valid, r.bank_name);
Python
import os
import requests

res = requests.post(
    "https://api.normadata.io/v1/validate/accounts",
    headers={
        "X-API-Key": os.environ["NORMADATA_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
        "items": [
            {"id": "1", "value": "0170010600000123456780", "country": "AR", "type": "cbu"},
            {"id": "2", "value": "DE89370400440532013000", "country": "DE", "type": "iban"},
        ],
    },
    timeout=10,
)
for r in res.json()["results"]:
    print(r["id"], r["checksum_valid"], r.get("bank_name"))
Go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"os"
)

type AccountItem struct {
	ID      string `json:"id"`
	Value   string `json:"value"`
	Country string `json:"country"`
	Type    string `json:"type,omitempty"`
}

type AccountResult struct {
	ID            string `json:"id"`
	Valid         bool   `json:"valid"`
	ChecksumValid bool   `json:"checksum_valid"`
	BankName      string `json:"bank_name"`
}

func main() {
	body, _ := json.Marshal(map[string]any{
		"items": []AccountItem{
			{ID: "1", Value: "0170010600000123456780", Country: "AR", Type: "cbu"},
			{ID: "2", Value: "DE89370400440532013000", Country: "DE", Type: "iban"},
		},
	})
	req, _ := http.NewRequest("POST", "https://api.normadata.io/v1/validate/accounts", bytes.NewReader(body))
	req.Header.Set("X-API-Key", os.Getenv("NORMADATA_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()

	var out struct {
		Results []AccountResult `json:"results"`
	}
	json.NewDecoder(res.Body).Decode(&out)
	for _, r := range out.Results {
		fmt.Println(r.ID, r.ChecksumValid, r.BankName)
	}
}
POST /v1/validate/emails

E-mails — sintaxe e typos em lote

Referência completa
cURL
curl -X POST https://api.normadata.io/v1/validate/emails \
  -H "X-API-Key: $NORMADATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":[
    {"id":"1","value":"  ROGER@Normadata.IO "},
    {"id":"2","value":"juan@gmial.com"}
  ]}'
TypeScript
const res = await fetch("https://api.normadata.io/v1/validate/emails", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.NORMADATA_API_KEY!,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    items: [
      { id: "1", value: "  ROGER@Normadata.IO " },
      { id: "2", value: "juan@gmial.com" },
    ],
  }),
});

const { results } = await res.json();
for (const r of results) console.log(r.id, r.valid, r.normalized ?? r.error);
Python
import os
import requests

res = requests.post(
    "https://api.normadata.io/v1/validate/emails",
    headers={
        "X-API-Key": os.environ["NORMADATA_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
        "items": [
            {"id": "1", "value": "  ROGER@Normadata.IO "},
            {"id": "2", "value": "juan@gmial.com"},
        ],
    },
    timeout=10,
)
for r in res.json()["results"]:
    print(r["id"], r["valid"], r.get("normalized") or r.get("error"))
Go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"os"
)

type EmailItem struct {
	ID    string `json:"id"`
	Value string `json:"value"`
}

type EmailResult struct {
	ID         string `json:"id"`
	Valid      bool   `json:"valid"`
	Normalized string `json:"normalized"`
	Error      string `json:"error"`
}

func main() {
	body, _ := json.Marshal(map[string]any{
		"items": []EmailItem{
			{ID: "1", Value: "  ROGER@Normadata.IO "},
			{ID: "2", Value: "juan@gmial.com"},
		},
	})
	req, _ := http.NewRequest("POST", "https://api.normadata.io/v1/validate/emails", bytes.NewReader(body))
	req.Header.Set("X-API-Key", os.Getenv("NORMADATA_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()

	var out struct {
		Results []EmailResult `json:"results"`
	}
	json.NewDecoder(res.Body).Decode(&out)
	for _, r := range out.Results {
		fmt.Println(r.ID, r.Valid, r.Normalized)
	}
}
POST /v1/validate/phones

Telefones — E.164 e tipo de linha em lote

Referência completa
cURL
curl -X POST https://api.normadata.io/v1/validate/phones \
  -H "X-API-Key: $NORMADATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":[
    {"id":"1","value":"+54 (11) 4555-2233","country":"AR"},
    {"id":"2","value":"11987654321","country":"BR"}
  ]}'
TypeScript
const res = await fetch("https://api.normadata.io/v1/validate/phones", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.NORMADATA_API_KEY!,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    items: [
      { id: "1", value: "+54 (11) 4555-2233", country: "AR" },
      { id: "2", value: "11987654321", country: "BR" },
    ],
  }),
});

const { results } = await res.json();
for (const r of results) console.log(r.id, r.normalized, r.type);
Python
import os
import requests

res = requests.post(
    "https://api.normadata.io/v1/validate/phones",
    headers={
        "X-API-Key": os.environ["NORMADATA_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
        "items": [
            {"id": "1", "value": "+54 (11) 4555-2233", "country": "AR"},
            {"id": "2", "value": "11987654321", "country": "BR"},
        ],
    },
    timeout=10,
)
for r in res.json()["results"]:
    print(r["id"], r.get("normalized"), r.get("type"))
Go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"os"
)

type PhoneItem struct {
	ID      string `json:"id"`
	Value   string `json:"value"`
	Country string `json:"country"`
}

type PhoneResult struct {
	ID         string `json:"id"`
	Valid      bool   `json:"valid"`
	Normalized string `json:"normalized"`
	Type       string `json:"type"`
}

func main() {
	body, _ := json.Marshal(map[string]any{
		"items": []PhoneItem{
			{ID: "1", Value: "+54 (11) 4555-2233", Country: "AR"},
			{ID: "2", Value: "11987654321", Country: "BR"},
		},
	})
	req, _ := http.NewRequest("POST", "https://api.normadata.io/v1/validate/phones", bytes.NewReader(body))
	req.Header.Set("X-API-Key", os.Getenv("NORMADATA_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()

	var out struct {
		Results []PhoneResult `json:"results"`
	}
	json.NewDecoder(res.Body).Decode(&out)
	for _, r := range out.Results {
		fmt.Println(r.ID, r.Normalized, r.Type)
	}
}
POST /v1/validate/records

Records — consistência e readiness

Referência completa
cURL
curl -X POST https://api.normadata.io/v1/validate/records \
  -H "X-API-Key: $NORMADATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":[
    {"reference_id":"prov-001","country":"AR",
     "tax_id":"20-12345678-6","account":"0170010600000123456780","account_type":"cbu",
     "name":"Juan Pérez","email":"juan@empresa.com"}
  ]}'
TypeScript
const res = await fetch("https://api.normadata.io/v1/validate/records", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.NORMADATA_API_KEY!,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    items: [
      {
        reference_id: "prov-001",
        country: "AR",
        tax_id: "20-12345678-6",
        account: "0170010600000123456780",
        account_type: "cbu",
        name: "Juan Pérez",
        email: "juan@empresa.com",
      },
    ],
  }),
});

const { results } = await res.json();
for (const r of results) console.log(r.reference_id, r.readiness.payment.status);
Python
import os
import requests

res = requests.post(
    "https://api.normadata.io/v1/validate/records",
    headers={
        "X-API-Key": os.environ["NORMADATA_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
        "items": [
            {
                "reference_id": "prov-001",
                "country": "AR",
                "tax_id": "20-12345678-6",
                "account": "0170010600000123456780",
                "account_type": "cbu",
                "name": "Juan Pérez",
                "email": "juan@empresa.com",
            }
        ],
    },
    timeout=10,
)
for r in res.json()["results"]:
    print(r["reference_id"], r["readiness"]["payment"]["status"])
Go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"os"
)

type RecordItem struct {
	ReferenceID string `json:"reference_id"`
	Country     string `json:"country"`
	TaxID       string `json:"tax_id,omitempty"`
	Account     string `json:"account,omitempty"`
	AccountType string `json:"account_type,omitempty"`
	Name        string `json:"name,omitempty"`
	Email       string `json:"email,omitempty"`
}

type ReadinessFlag struct {
	Status string `json:"status"`
	Reason string `json:"reason,omitempty"`
}

type RecordResult struct {
	ReferenceID string `json:"reference_id"`
	Readiness   struct {
		Payment ReadinessFlag `json:"payment"`
		Billing ReadinessFlag `json:"billing"`
	} `json:"readiness"`
}

func main() {
	body, _ := json.Marshal(map[string]any{
		"items": []RecordItem{{
			ReferenceID: "prov-001",
			Country:     "AR",
			TaxID:       "20-12345678-6",
			Account:     "0170010600000123456780",
			AccountType: "cbu",
			Name:        "Juan Pérez",
			Email:       "juan@empresa.com",
		}},
	})
	req, _ := http.NewRequest("POST", "https://api.normadata.io/v1/validate/records", bytes.NewReader(body))
	req.Header.Set("X-API-Key", os.Getenv("NORMADATA_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()

	var out struct {
		Results []RecordResult `json:"results"`
	}
	json.NewDecoder(res.Body).Decode(&out)
	for _, r := range out.Results {
		fmt.Println(r.ReferenceID, r.Readiness.Payment.Status)
	}
}
REFERÊNCIAS

Documentação detalhada por endpoint

Cada endpoint tem uma página dedicada com o schema completo do request, todos os campos de resposta, os erros comuns e notas de implementação.