Look up a CPF with Swift
Look up a CPF (Brazil's individual taxpayer ID) with Swift using the native URLSession. No external dependencies.
Using Cursor, Lovable, v0 or another AI? Copy the Simple Lookup prompt and paste it into your assistant.
Before you start
- Create a free account at app.cpfhub.io: the Free plan includes 50 credits and does not ask for a card.
- Copy your API key from app.cpfhub.io/api-keys.
- Store the key in an environment variable, never in your code:
export CPFHUB_API_KEY="your_api_key"Example
import Foundation
let cpf = "12345678909"
let apiKey = ProcessInfo.processInfo.environment["CPFHUB_API_KEY"] ?? ""
var request = URLRequest(url: URL(string: "https://api.cpfhub.io/cpf/\(cpf)")!)
request.setValue(apiKey, forHTTPHeaderField: "x-api-key")
request.timeoutInterval = 10
let (data, response) = try await URLSession.shared.data(for: request)
let status = (response as? HTTPURLResponse)?.statusCode ?? 0
let body = (try JSONSerialization.jsonObject(with: data)) as? [String: Any] ?? [:]
switch status {
case 200:
let data = body["data"] as? [String: Any] ?? [:]
print(data["name"] ?? "", data["birthDate"] ?? "")
case 404:
print("CPF not found (no credit charged)")
default:
// error comes as text ("...") or as an object (["message": "..."])
let err = (body["error"] as? [String: Any])?["message"] ?? body["error"] ?? ""
print("Error \(status): \(err)")
}Save it as main.swift and run it with swift main.swift (Swift 5.7+, macOS 12+). Keep the key on the backend, never in apps distributed through the App Store.
Response
Found CPF (200, uses 1 credit):
{
"success": true,
"data": {
"cpf": "12345678909",
"name": "Fulano de Tal",
"nameUpper": "FULANO DE TAL",
"gender": "M",
"birthDate": "15/06/1990",
"day": 15,
"month": 6,
"year": 1990
}
}CPF not found (404, does not use a credit):
{
"success": false,
"data": null,
"error": { "message": "CPF não encontrado na base de dados" }
}The CPF 12345678909 is fictional, used only in the examples. gender can be null. The error.message text comes from the API in Portuguese ("CPF not found in the database").
Errors
| Status | What it means | What to do |
|---|---|---|
404 | CPF is not in the database | Treat it as "not found". Does not use a credit. |
400 / 422 | CPF does not have 11 digits or has an invalid check digit | Fix the input. Does not use a credit. |
401 | Missing or invalid API key | Check the CPFHUB_API_KEY variable. |
403 | Credits used up or inactive account | Check your balance with GET /quota or top up in the dashboard. |
429 | Per-minute request limit | Wait the number of seconds in the Retry-After header and try again. |
5xx | Temporary failure | Try again after a few seconds. |
The error field can be text ("error": "...") or an object ("error": { "message": "..." }), depending on the status. The examples above handle both formats. Full list in Error Codes.