Get card metadata | Moov Documentation
Get card metadata
Look up metadata for a card without linking it to a Moov account.
Only use this endpoint if you have provided Moov with a copy of your PCI attestation of compliance.
To access this endpoint using an access token you'll need to specify the /card-metadata.read scope.
Request Format
POST
/card-metadata
Example Request
curl -X POST "https://api.moov.io/card-metadata" \
-H "Authorization: Bearer {token}" \
-H "X-Moov-Version: v2026.07.00" \
-d '{
"cardNumber": "4111111111111111"
}'
Code Examples
JavaScript
import { Moov } from "@moovio/sdk";
const moov = new Moov({
security: {
username: "",
password: "",
},
});
async function run() {
const result = await moov.cards.getMetadata({
cardNumber: "4111111111111111",
});
console.log(result);
}
run();
PHP
declare(strict_types=1);
require 'vendor/autoload.php';
use Moov\MoovPhp;
use Moov\MoovPhp\Models\Components;
$sdk = MoovPhp\Moov::builder()
->setSecurity(
new Components\Security(
username: '',
password: '',
)
)
->build();
$request = new Components\CardMetadataRequest(
cardNumber: '4111111111111111',
);
$response = $sdk->cards->getMetadata(
request: $request
);
if ($response->cardMetadata !== null) {
// handle response
}
Java
package hello.world;
import io.moov.sdk.Moov;
import io.moov.sdk.models.components.CardMetadataRequest;
import io.moov.sdk.models.components.Security;
import io.moov.sdk.models.errors.CardMetadataRequestError;
import io.moov.sdk.models.errors.GenericError;
import io.moov.sdk.models.operations.GetCardMetadataResponse;
import java.lang.Exception;
public class Application {
public static void main(String[] args) throws GenericError, CardMetadataRequestError, Exception {
Moov sdk = Moov.builder()
.security(Security.builder()
.username("")
.password("")
.build())
.build();
CardMetadataRequest req = CardMetadataRequest.builder()
.cardNumber("4111111111111111")
.build();
GetCardMetadataResponse res = sdk.cards().getMetadata()
.request(req)
.call();
if (res.cardMetadata().isPresent()) {
System.out.println(res.cardMetadata().get());
}
}
}
Python
from moovio_sdk import Moov
from moovio_sdk.models import components
with Moov(
security=components.Security(
username="",
password="",
),
) as moov:
res = moov.cards.get_metadata(e2ee={
"token": "eyJhbGciOiJFQ0RILUVTK0EyNTZLVyIsImVuYyI6IkEyNTZHQ00iLCJlcGsiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTUyMSIsIngiOiJBS0NYVDM1WVdvTm8wbzExNy1SU0dqUGg3alN1NjFmLUhnYkx1dW0xVG1ueTRlcW5yX2hyU0hpY0w1d3gwODRCWDBRZjVTdEtkRUoydzY2ZUJqWHprRV9OIiwieSI6IkFIMEJfT2RaYTQtbG43dGJ4M3VBdlc1NDNQRE9HUXBCTDloRFFNWjlTQXNfOW05UWN3dnhRd1hrb1VrM3VzT1FnVV9ySVFrNFRoZ1NTUzV4UlhKcm5ZaTkifSwia2lkIjoiYmRvV3pLekpKUGw0TVFIaENDa05WYTZlZ1dmYi02V1haSjZKTFZqQ0hWMD0ifQ.HalyoHsfufBJEODd2lD9ThQvvVWw3b2kgWDLHGxmHhMv8rODyLL_Ug.rpQP178t8Ed_pUU2.Sn9UFeVoegAxiMUv11q7l3M0y9YHSLYi2n_JB7n7Pc777_47-icfaxstJemT0IC81w.akkq1EBxzWkBr4vEomSpWA",
}, card_number="4111111111111111")
# Handle response
print(res)
Ruby
require 'moov_ruby'
Models = ::Moov::Models
s = ::Moov::Client.new(
security: Models::Components::Security.new(
username: '',
password: ''
)
)
req = Models::Components::CardMetadataRequest.new(
card_number: '4111111111111111'
)
res = s.cards.get_metadata(request: req)
unless res.card_metadata.nil?
# handle response
end
C#
using Moov.Sdk;
using Moov.Sdk.Models.Components;
var sdk = new MoovClient(security: new Security() {
Username = "",
Password = "",
});
CardMetadataRequest req = new CardMetadataRequest() {
CardNumber = "4111111111111111",
};
var res = await sdk.Cards.GetMetadataAsync(req);
// handle response
Example Response
{
"bin": "411111",
"brand": "Visa",
"cardCategory": "CLASSIC",
"cardType": "credit",
"commercial": false,
"domesticPullFromCard": "supported",
"domesticPushToCard": "standard",
"issuer": "GRINGOTTS BANK",
"issuerCountry": "US",
"issuerPhone": "8185551212",
"issuerURL": "HTTPS://WWW.EXAMPLE.COM/",
"regulated": false
}
Error Responses
Example of an error response:
{
"error": "string"
}
Note
Set this header to v2026.07.00 to use the API described in this specification. When omitted, the server defaults to v2024.01.00, which may not match the behavior documented here.