Tokenizar cartao
curl --request POST \
--url https://api-payment.safefypay.com.br/v1/card-tokenize \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"cardNumber": "4111111111111111",
"cardHolderName": "JOAO SILVA",
"cardExpirationMonth": "12",
"cardExpirationYear": "2028",
"cardCvv": "123"
}
'import requests
url = "https://api-payment.safefypay.com.br/v1/card-tokenize"
payload = {
"cardNumber": "4111111111111111",
"cardHolderName": "JOAO SILVA",
"cardExpirationMonth": "12",
"cardExpirationYear": "2028",
"cardCvv": "123"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
cardNumber: '4111111111111111',
cardHolderName: 'JOAO SILVA',
cardExpirationMonth: '12',
cardExpirationYear: '2028',
cardCvv: '123'
})
};
fetch('https://api-payment.safefypay.com.br/v1/card-tokenize', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-payment.safefypay.com.br/v1/card-tokenize"
payload := strings.NewReader("{\n \"cardNumber\": \"4111111111111111\",\n \"cardHolderName\": \"JOAO SILVA\",\n \"cardExpirationMonth\": \"12\",\n \"cardExpirationYear\": \"2028\",\n \"cardCvv\": \"123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-payment.safefypay.com.br/v1/card-tokenize")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"cardNumber\": \"4111111111111111\",\n \"cardHolderName\": \"JOAO SILVA\",\n \"cardExpirationMonth\": \"12\",\n \"cardExpirationYear\": \"2028\",\n \"cardCvv\": \"123\"\n}")
.asString();{
"data": {
"cardToken": "ct_abc123def456",
"last4": "1111",
"brand": "visa"
},
"message": "<string>",
"error": {
"message": "Token invalido ou expirado.",
"code": "unauthorized"
}
}{
"data": {
"cardToken": "ct_abc123def456",
"last4": "1111",
"brand": "visa"
},
"message": "<string>",
"error": {
"message": "Token invalido ou expirado.",
"code": "unauthorized"
}
}{
"data": {
"cardToken": "ct_abc123def456",
"last4": "1111",
"brand": "visa"
},
"message": "<string>",
"error": {
"message": "Token invalido ou expirado.",
"code": "unauthorized"
}
}{
"data": {
"cardToken": "ct_abc123def456",
"last4": "1111",
"brand": "visa"
},
"message": "<string>",
"error": {
"message": "Token invalido ou expirado.",
"code": "unauthorized"
}
}Transactions
Tokenize card
Securely tokenize a credit card
POST
/
v1
/
card-tokenize
Tokenizar cartao
curl --request POST \
--url https://api-payment.safefypay.com.br/v1/card-tokenize \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"cardNumber": "4111111111111111",
"cardHolderName": "JOAO SILVA",
"cardExpirationMonth": "12",
"cardExpirationYear": "2028",
"cardCvv": "123"
}
'import requests
url = "https://api-payment.safefypay.com.br/v1/card-tokenize"
payload = {
"cardNumber": "4111111111111111",
"cardHolderName": "JOAO SILVA",
"cardExpirationMonth": "12",
"cardExpirationYear": "2028",
"cardCvv": "123"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
cardNumber: '4111111111111111',
cardHolderName: 'JOAO SILVA',
cardExpirationMonth: '12',
cardExpirationYear: '2028',
cardCvv: '123'
})
};
fetch('https://api-payment.safefypay.com.br/v1/card-tokenize', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-payment.safefypay.com.br/v1/card-tokenize"
payload := strings.NewReader("{\n \"cardNumber\": \"4111111111111111\",\n \"cardHolderName\": \"JOAO SILVA\",\n \"cardExpirationMonth\": \"12\",\n \"cardExpirationYear\": \"2028\",\n \"cardCvv\": \"123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-payment.safefypay.com.br/v1/card-tokenize")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"cardNumber\": \"4111111111111111\",\n \"cardHolderName\": \"JOAO SILVA\",\n \"cardExpirationMonth\": \"12\",\n \"cardExpirationYear\": \"2028\",\n \"cardCvv\": \"123\"\n}")
.asString();{
"data": {
"cardToken": "ct_abc123def456",
"last4": "1111",
"brand": "visa"
},
"message": "<string>",
"error": {
"message": "Token invalido ou expirado.",
"code": "unauthorized"
}
}{
"data": {
"cardToken": "ct_abc123def456",
"last4": "1111",
"brand": "visa"
},
"message": "<string>",
"error": {
"message": "Token invalido ou expirado.",
"code": "unauthorized"
}
}{
"data": {
"cardToken": "ct_abc123def456",
"last4": "1111",
"brand": "visa"
},
"message": "<string>",
"error": {
"message": "Token invalido ou expirado.",
"code": "unauthorized"
}
}{
"data": {
"cardToken": "ct_abc123def456",
"last4": "1111",
"brand": "visa"
},
"message": "<string>",
"error": {
"message": "Token invalido ou expirado.",
"code": "unauthorized"
}
}Tokenizes a credit card using the merchant’s active acquirer, without storing PAN/CVV in Safefy’s database. The returned token can be used in
POST /v1/transactions via the cardToken field.
Request
POST /v1/card-tokenize
{
"cardNumber": "4111111111111111",
"cardHolderName": "João Silva",
"cardExpirationMonth": 12,
"cardExpirationYear": 2028,
"cardCvv": "123"
}
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
cardNumber | string | yes | Card number (13-19 digits) |
cardHolderName | string | yes | Name printed on the card |
cardExpirationMonth | int | yes | Expiration month (1-12) |
cardExpirationYear | int | yes | Expiration year (e.g. 2028) |
cardCvv | string | yes | Security code (3-4 digits) |
Responses
200 — Success
{
"data": {
"cardToken": "ct_abc123def456",
"last4": "1111",
"brand": "visa"
}
}
| Field | Type | Description |
|---|---|---|
cardToken | string | Card token (prefix ct_). Time-limited validity. |
last4 | string | Last 4 digits of the card |
brand | string | Card brand (e.g. visa, mastercard) |
400 — Invalid data
{
"error": {
"message": "Invalid card data.",
"code": "invalid_card_data"
}
}
401 — Invalid JWT token
{
"error": {
"message": "Invalid token.",
"code": "invalid_token"
}
}
422 — Acquirer doesn’t support tokenization
{
"error": {
"message": "Configured acquirer does not natively support tokenization.",
"code": "tokenization_not_supported"
}
}
Authorizations
Token JWT obtido via /v1/auth/token
Body
application/json
Numero do cartao (13-19 digitos)
Example:
"4111111111111111"
Nome impresso no cartao
Example:
"JOAO SILVA"
Mes de expiracao (1-12)
Example:
"12"
Ano de expiracao (4 digitos)
Example:
"2028"
Codigo de seguranca (3-4 digitos)
Example:
"123"