vCard Hosting

API Documentation

Updated October 22, 2026

vcrd.co has a JSON API for reading and managing your cards and stats. Create an API key under Settings → API keys; it's shown once, so keep it safe. Reading works on every plan. Creating, changing and deleting cards needs the Personal Pro plan or above, and the same card limits apply as in the control panel.

API v2

Send your key in the Authorization header, and JSON in request bodies:

curl https://vcardhosting.com/v2/cards -H "Authorization: Bearer vch_…"
Method Path What it does
GET /v2/account Your plan, card limit, card count and whether the API can make changes
GET /v2/cards?q=&sort=&page=&per_page= List your cards (50 per page, at most 200)
POST /v2/cards Create a card; answers 201 with the card
GET /v2/cards/{id} Get one card
PATCH /v2/cards/{id} Change some fields; fields you leave out keep their values
DELETE /v2/cards/{id} Delete a card (you can restore it from the control panel for 30 days)
GET /v2/cards/{id}/stats?from=YYYY-MM-DD&to=YYYY-MM-DD Daily views, scans, QR page views, downloads and texts (the last 30 days by default, at most 400)

A card has the fields title, prefix, first_name, middle_name, last_name, suffix, nickname, birthday, organization, job_title, job_department, street_1, street_2, city, state, zip, country, email, website, phone, mobile, fax, facebook, twitter, linkedin, notes and custom (up to five {"type", "title", "value"} objects, where type is tel, url, email or note). You can also set noindex, password (write-only; "" removes it), published and sms_name.

curl -X POST https://vcardhosting.com/v2/cards \
  -H "Authorization: Bearer vch_…" -H "Content-Type: application/json" \
  -d '{"title": "Sales", "first_name": "Ada", "email": "ada@example.com"}'

Errors use HTTP status codes (400 invalid, 401 bad key, 403 not on your plan or over your card limit, 404 not found, 429 too many requests) and a JSON body with code, message and details.reason, plus details.field for an invalid field. Each key can make 120 requests a minute.

API v1 (legacy)

The original API still works for existing integrations. Every method is a GET to https://vcardhosting.com/api/<method>.php with these parameters:

  • key: your API key
  • format: json, xml, php (serialized PHP) or test (readable output, the default)
  • callback: with format=json, wraps the result for JSONP. It must be a plain JavaScript name, like handleCards or app.cards.load.
Method Extra parameters Result
getvCards All your cards, in cards
getvCard id One card, in cards
getStats All-time totals per card and type, in cards
createvCard xml Creates a card from the XML's fields; data has its id and url
updatevCard id, xml Changes the fields given in the XML
deletevCard id Deletes the card

Responses always use HTTP status 200, and report success or failure in status and message: "200" with "Created Successfully", "Updated Successfully" or "Deleted Successfully"; "500" with "No Results Found" or "Not Authorized"; or "Error" with "Bad Request - Invalid XML".

The xml parameter is URL-encoded XML whose root element's children are card fields, using the names listed under v2 (except custom, password and the photo, which v1 doesn't set):

https://vcardhosting.com/api/createvCard.php?key=…&format=json&xml=%3Cvcard%3E%3Cfirst_name%3EAda%3C%2Ffirst_name%3E%3C%2Fvcard%3E

Example response:

{"status":"200","message":"vcrd.co API","link":"http:\/\/vcardhosting.com\/docs\/api\/",
 "request":{"method":"getvCard","id":36,"format":"json","key":"…","date":"2026-10-22 04:05:06"},
 "cards":[{"id":"36","url":"https:\/\/vcrd.co\/ccagle8\/36","title":"My vCard","first_name":"Joe"}]}

New integrations should use v2.