Reference

CV

The CV a user chose to share, as structured data, as a PDF, and as a durable link. Always current: Tabbio resolves the selection on every read.

Download a CV from a durable link

GET/v1/cv-links/{token}

No authenticationNo scope required

Streams the shared CV as a PDF from the durable link returned in pdf.url by GET /v1/me/cv. No credential is required: the signed token in the path is the credential. The document is always rendered fresh, so a link stored today shows the CV as it is when it is opened. The link lives exactly as long as the consent behind it: it stops working the moment the user disconnects the app, turns CV sharing off in Connected apps, or your client revokes its refresh token. Read pdf.url again after any of those to get a fresh link.

Path parameters

FieldTypeDescription
tokenrequiredstring

The signed link token, in the form <id>.<signature>.pdf.

Status codes

  • 200

    The CV as a PDF.

  • 404

    The link is unknown, was revoked, no longer carries the cv:read grant, or the user disconnected the app.

Request
curl https://server.tabbio.com/v1/cv-links/$TOKEN
Response
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: inline; filename="cv.pdf"

<binary PDF>

Get the shared CV

GET/v1/me/cv

User access tokencv:read

Returns the CV the user chose to share, as the canonical Tabbio CV document. The selection is resolved on every request, so when the connection follows the main CV the partner always reads the current one. Private contact details are stripped without the cv:contact scope, the photo without the photo permission. Send the previous ETag back in If-None-Match to poll cheaply: an unchanged CV answers 304 with no body. pdf.url is a durable link with no expiry, but it dies with the consent behind it: read this endpoint again after the user changes what they share, or after you revoke your refresh token, to get a working one.

Headers

FieldTypeDescription
If-None-Matchstring

The ETag from a previous read. Answers 304 when the CV has not changed.

Response

These fields sit inside data.

FieldTypeDescription
idalwaysstring

"master" for the profile-backed main CV, otherwise the CV id.

titlealwaysstring

What the user calls this CV.

updatedAtalwaysstring

When the CV last changed. Poll this, or use the ETag.

isMainCvalwaysboolean

True when this is the CV the user set as their main one.

languagealwaysstring

Detected from the CV’s own content: "en" or "ar".

documentalwaysobject

The CV itself.

usernamealwaysstring

The owner’s Tabbio handle.

publicCvUrlalwaysstring or null

Their public profile, or null when that page would not resolve.

namealwaysstring

The name printed at the top of the CV.

titlealwaysstring or null

The headline under the name.

summaryalwaysstring or null

The profile summary paragraph.

bioalwaysstring or null

A shorter bio, when the profile carries one.

locationalwaysstring or null

City and country.

avatarUrlalwaysstring or null

Photo. Null when the user chose not to share it.

contactEmailalwaysstring or null

Contact address. Null without the email scope.

isUaePassVerifiedalwaysboolean

True only when the identity is UAE PASS verified.

socialsalwaysobject

Links keyed by platform, plus phone. Phone is absent without the cv:contact scope.

openToWorkalwaysboolean

Whether the person is open to offers.

skillsalwaysstring[]

Every skill, flattened.

skillGroupsalwaysobject[]

The same skills, grouped.

categoryalwaysstring

What the group is called, such as "Design".

itemsalwaysstring[]

The skills in this group.

languagesalwaysstring[]

Languages with proficiency, such as "Arabic (Native)".

highlightsalwaysobject[]

Career highlights.

idstring

Stable id, when the CV carries one.

titlealwaysstring

The achievement in a few words.

descalwaysstring

One or two sentences of detail.

experiencesalwaysobject[]

Work history, most recent first.

idalwaysstring

Stable id for this role.

titlealwaysstring

Job title.

companyalwaysstring

Employer name.

locationstring or null

Where the role was based.

locationTypestring or null

How the role was worked.

One of Remote, On-site, Hybrid

employmentTypestring or null

Full-time, contract, and so on.

startDatealwaysstring or null

When the role started, or null when unknown.

endDatestring or null

When it ended. Null if current.

currentalwaysboolean

True while the person still holds the role.

overviewstring or null

A paragraph about the role.

bulletsalwaysstring[]

Achievements, one per line.

educationsalwaysobject[]

Education history.

idalwaysstring

Stable id for this entry.

schoolalwaysstring

Institution name.

degreestring or null

The qualification earned.

fieldOfStudystring or null

Subject studied.

startDatestring or null

When study started.

endDatestring or null

When study finished.

descriptionstring or null

Grade and any extra detail the person added.

certificationsalwaysobject[]

Certifications and licences.

idalwaysstring

Stable id for this certification.

namealwaysstring

Certification name.

issueralwaysstring

Who issued it.

issueDatestring or null

When it was issued.

expirationDatestring or null

When it expires. Null when it does not.

credentialUrlstring or null

Public verification link, when there is one.

projectsalwaysobject[]

Featured projects.

idalwaysstring

Stable id for this project.

titlealwaysstring

Project name.

descriptionstring or null

What the project was.

imagestring or null

Cover image, when there is one.

linkstring or null

Where to see the project.

technologiesalwaysstring[]

Tools and stack used.

personalDetailsalwaysobject or null

Private details. Null without the cv:contact scope, and when nothing is stored.

dateOfBirthalwaysstring or null

Date of birth, as the user entered it.

genderalwaysstring or null

Gender, as the user entered it.

maritalStatusalwaysstring or null

Marital status.

nationalityalwaysstring or null

Nationality.

residencealwaysstring or null

Where the user currently lives.

visaResidencyalwaysstring or null

Visa or residency status.

nationalServicealwaysstring or null

National service status.

dependentsalwaysstring or null

Number of dependants.

publicProfileUrlalwaysstring or null

Their public Tabbio profile, when that page resolves.

pdfalwaysobject

Where to download this CV as a PDF.

urlalwaysstring
contentTypealwaysstring

One of application/pdf

Status codes

  • 200

    The shared CV.

  • 304

    The CV has not changed since the given ETag.

  • 401

    The access token is missing, expired, or revoked.

  • 403

    The user did not grant the cv:read scope.

  • 404

    This account has no CV to share yet.

Request
curl https://server.tabbio.com/v1/me/cv \
  -H "Authorization: Bearer $TABBIO_ACCESS_TOKEN"
Response 200
{
  "data": {
    "id": "master",
    "title": "Main CV",
    "updatedAt": "2026-08-30T09:12:04.000Z",
    "isMainCv": true,
    "language": "en",
    "document": {
      "username": "sara",
      "publicCvUrl": "https://sara.tabbio.com",
      "name": "Sara Ahmed",
      "title": "Senior Product Designer",
      "summary": "Product designer with nine years in fintech and logistics across the UAE and the wider Gulf. I work end to end, from research through to the shipped interface.",
      "bio": null,
      "location": "Dubai, United Arab Emirates",
      "avatarUrl": "https://cdn.tabbio.com/avatars/sara.jpg",
      "contactEmail": "sara@example.com",
      "isUaePassVerified": true,
      "socials": {
        "linkedin": "https://www.linkedin.com/in/sara-ahmed-design",
        "website": "https://sara.design",
        "phone": "+971 50 123 4567"
      },
      "openToWork": true,
      "skills": [
        "Product design",
        "Design systems",
        "User research",
        "Figma",
        "Prototyping"
      ],
      "skillGroups": [
        {
          "category": "Design",
          "items": [
            "Product design",
            "Design systems",
            "Prototyping"
          ]
        },
        {
          "category": "Research",
          "items": [
            "User research",
            "Usability testing"
          ]
        }
      ],
      "languages": [
        "Arabic (Native)",
        "English (Professional)"
      ],
      "highlights": [
        {
          "id": "hl_3a71",
          "title": "Rebuilt merchant onboarding",
          "desc": "Cut a payments onboarding flow from eleven screens to four and lifted completion from 54 to 81 percent."
        }
      ],
      "experiences": [
        {
          "id": "exp_41c8",
          "title": "Senior Product Designer",
          "company": "Mena Pay",
          "location": "Dubai, United Arab Emirates",
          "locationType": "Hybrid",
          "employmentType": "Full-time",
          "startDate": "2022-03-01T00:00:00.000Z",
          "endDate": null,
          "current": true,
          "overview": "Own the design of merchant onboarding and payouts for a regional payments platform.",
          "bullets": [
            "Cut merchant onboarding from eleven screens to four, lifting completion from 54 to 81 percent.",
            "Built the design system now used by three product teams."
          ]
        },
        {
          "id": "exp_7d02",
          "title": "Product Designer",
          "company": "Aramex",
          "location": "Dubai, United Arab Emirates",
          "locationType": "On-site",
          "employmentType": "Full-time",
          "startDate": "2018-09-01T00:00:00.000Z",
          "endDate": "2022-02-28T00:00:00.000Z",
          "current": false,
          "overview": "Designed the courier and dispatch tooling used across the Gulf network.",
          "bullets": [
            "Redesigned the dispatch console used every day by 400 operators."
          ]
        }
      ],
      "educations": [
        {
          "id": "edu_2b55",
          "school": "American University of Sharjah",
          "degree": "Bachelor of Science",
          "fieldOfStudy": "Multimedia Design",
          "startDate": "2014-09-01T00:00:00.000Z",
          "endDate": "2018-06-01T00:00:00.000Z",
          "description": null
        }
      ],
      "certifications": [
        {
          "id": "cert_9e13",
          "name": "UX Certification",
          "issuer": "Nielsen Norman Group",
          "issueDate": "2023-05-18T00:00:00.000Z",
          "expirationDate": null,
          "credentialUrl": "https://www.nngroup.com/ux-certification/verify/1049233"
        }
      ],
      "projects": []
    },
    "personalDetails": {
      "dateOfBirth": "1996-02-14",
      "gender": "Female",
      "maritalStatus": "Single",
      "nationality": "Lebanese",
      "residence": "Dubai, United Arab Emirates",
      "visaResidency": "Employment visa",
      "nationalService": null,
      "dependents": null
    },
    "publicProfileUrl": "https://sara.tabbio.com",
    "pdf": {
      "url": "https://server.tabbio.com/v1/cv-links/9f2b7c41ad83e05d6b1c4f7a2e930d18.4c1d8e05b7a92f36d0c85e41ba7f2d69.pdf",
      "contentType": "application/pdf"
    }
  },
  "error": null,
  "meta": null
}

Download the shared CV as a PDF

GET/v1/me/cv.pdf

User access tokencv:read

Streams the same CV as a PDF, rendered by the same generator as the in-app export and masked by the same privacy projection as the JSON. For a link you can store and reuse without an access token, read pdf.url from GET /v1/me/cv; that link is revoked whenever the CV grant is.

Status codes

  • 200

    The CV as a PDF.

  • 401

    The access token is missing, expired, or revoked.

  • 403

    The user did not grant the cv:read scope.

  • 404

    This account has no CV to share yet.

Request
curl https://server.tabbio.com/v1/me/cv.pdf \
  -H "Authorization: Bearer $TABBIO_ACCESS_TOKEN"
Response
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: inline; filename="cv.pdf"

<binary PDF>

Base URL https://server.tabbio.com. Every response outside the token endpoint uses the { data, error, meta } envelope.