MyPADI · Fields → APIPer-persona field mapping
PADI-90 · padi.com/myaccount

MyPADI — Dashboard Field → API Mapping

Every on-screen field from the wireframe, per persona and account screen, mapped to the API that supplies it. Where an API exists, click the API → source cell to expand its cURL request and response shape.

Source · MyPADI wireframe (personas 1a–1g, account 2a–2e)APIs · verified learning / club-pro / travel references
Direct API field Derived / deep-link / CMS No API yet — confirm
Auth: unless noted, every API call uses the same Cognito idToken as Authorization: Bearer + an affiliate-id header (public search endpoints need none; Accredible badges use their own token). Sample values use affiliate-id 21613093. Click any API → source that references a real endpoint to see its cURL and a trimmed response shape.
Variables used in the endpoint URLs
<idToken>
Cognito JWT from the login call (POST api.global-prod.padi.com/auth/api/oauth/login) — sent as Authorization: Bearer on every authenticated request.
{affiliateId}
the signed-in user’s PADI id (sample 21613093) — read from the idToken claims (custom:affiliate_id); the same value goes in the affiliate-id header.
{packageId}
numeric course id — comes from entitlements → Items[].packageId (owned courses) or the ?tag=recommended list; feeds /details and /report.
{customCourseId}
the course slug (e.g. open-water-diver) — returned on course objects; feeds /assessmentresults and /eRecord/archive.
{n}
a count — e.g. GeteCardTopPro/5 = latest 5 eCards.
{recipientId}
preference-centre recipient id — the captured call used a Salesforce contact id (sample 0030N000034rdwSQAQ) while the learning app passes the {affiliateId}; confirm which identifier the service keys on.
{global_uid}
the user’s global UUIDkeys.global_uid in SFMC preference saves and the /v1/unsubscribe/{global_uid} path; the Accredible badge API uses the same recipient uid (with the Accredible org token + HMAC headers, not the Cognito token).
{locationPk}
Travel/Adventures numeric location id (sample 956) — from the location search (location-info/nearby / suggest).
query params
?filter=idc, culture=en-US&platform=PLP, ?tag=recommended — fixed values as captured from the PADI apps; is_past=true|false — past vs upcoming bookings; page/page_size — pagination. The /1/ in getcarddata/1/{affiliateId} is a fixed segment as captured — meaning unconfirmed.
DashboardAccount
1a

Start — Potential Diver (non-diver)

Mostly covered
No certs yet. Profile + intro course + Club prompt.
1Profile data
FieldAPI → source
Name
GET /profiles/{affiliateId}fullName / firstName
cURL
curl 'https://learning-prod.padi.com/profiles/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "affiliateId": 21613093,
  "firstName": "Jane",
  "lastName": "Diver",
  "fullName": "Jane Diver",
  "photoUrl": "https://cdn.padi.com/…/photo.jpg",
  "dob": "1990-04-12",
  "primaryEmailAddress": "jane@example.com",
  "phoneNumber": "+1 555 0100",
  "mailingAddress": {
    "addressLine1": "1 Ocean Way", "city": "San Diego",
    "state": "CA", "postalCode": "92101", "country": "US"
  }
}
Photo
GET /profiles/{affiliateId}photoUrl
cURL
curl 'https://learning-prod.padi.com/profiles/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "affiliateId": 21613093,
  "firstName": "Jane",
  "lastName": "Diver",
  "fullName": "Jane Diver",
  "photoUrl": "https://cdn.padi.com/…/photo.jpg",
  "dob": "1990-04-12",
  "primaryEmailAddress": "jane@example.com",
  "phoneNumber": "+1 555 0100",
  "mailingAddress": {
    "addressLine1": "1 Ocean Way", "city": "San Diego",
    "state": "CA", "postalCode": "92101", "country": "US"
  }
}
Certification status
derived: diveChek / eCards empty → “not yet certified”
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
2Featured intro course (Discover Scuba)
FieldAPI → source
Course image
GET /v2/courses?tag=recommendedimage.url
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses?tag=recommended' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
[
  {
    "packageId": 2270,
    "courseTitle": "Open Water Diver",
    "customCourseId": "open-water-diver",
    "tag": "recommended",
    "image": { "url": "https://cdn.padi.com/…/ow.jpg", "alt": "Open Water" }
  }
]
Course title
…?tag=recommendedcourseTitle
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses?tag=recommended' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
[
  {
    "packageId": 2270,
    "courseTitle": "Open Water Diver",
    "customCourseId": "open-water-diver",
    "tag": "recommended",
    "image": { "url": "https://cdn.padi.com/…/ow.jpg", "alt": "Open Water" }
  }
]
Course descriptionnot in recommended list — course details or CMS/catalog
Course URLdeep-link to learning.padi.com (customCourseId)
3PADI Club prompt
FieldAPI → source
Price per yearstatic / CMS — no join-pricing API found
Join PADI Club URLdeep-link (store /subscription/padi-club-membership)
4Recommended courses (carousel)
FieldAPI → source
Course image
GET /v2/courses?tag=recommendedimage.url
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses?tag=recommended' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
[
  {
    "packageId": 2270,
    "courseTitle": "Open Water Diver",
    "customCourseId": "open-water-diver",
    "tag": "recommended",
    "image": { "url": "https://cdn.padi.com/…/ow.jpg", "alt": "Open Water" }
  }
]
Course name
…?tag=recommendedcourseTitle
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses?tag=recommended' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
[
  {
    "packageId": 2270,
    "courseTitle": "Open Water Diver",
    "customCourseId": "open-water-diver",
    "tag": "recommended",
    "image": { "url": "https://cdn.padi.com/…/ow.jpg", "alt": "Open Water" }
  }
]
Course URLdeep-link (customCourseId)
1b

Enrolled Student

Partial
In-progress course + certification status.
Where the id comes from: GET /v2/entitlements/{affiliateId}?filter=idc lists every course the user owns — each item carries the packageId. Feed that into /v2/courses/{packageId}/details (title, hero, status, dateStarted); progress uses /v2/courses/{customCourseId}/assessmentresults (customCourseId is the course slug on course objects — confirm it is also returned on the entitlements payload). The affiliateId itself comes from the idToken.
1Courses (in progress)
FieldAPI → source
Course ids — which courses the user owns
GET /v2/entitlements/{affiliateId}?filter=idcItems[].packageId
cURL
curl 'https://learning-prod.padi.com/learning/v2/entitlements/21613093?filter=idc' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "Items": [
    { "packageId": "522", "platform": "idc", "title": "Open Water Diver" }
  ]
}
// each item = a course the user owns; its packageId feeds /details & /report
Course name
GET /v2/courses/{packageId}/detailstitle (id from entitlements)
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{packageId}/details?culture=en-US&platform=PLP' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "packageId": 2270,
  "customCourseId": "open-water-diver",
  "title": "Open Water Diver",
  "heroUrl": "https://cdn.padi.com/…/hero.jpg",
  "status": "InProgress",
  "dateStarted": "2026-05-01T09:00:00Z",
  "sections": [ { "id": 1, "title": "Knowledge Dev.", "isCompleted": true } ]
}
Course image
…/detailsheroUrl
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{packageId}/details?culture=en-US&platform=PLP' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "packageId": 2270,
  "customCourseId": "open-water-diver",
  "title": "Open Water Diver",
  "heroUrl": "https://cdn.padi.com/…/hero.jpg",
  "status": "InProgress",
  "dateStarted": "2026-05-01T09:00:00Z",
  "sections": [ { "id": 1, "title": "Knowledge Dev.", "isCompleted": true } ]
}
% completion
derived from assessmentresults (per-section isCompleted)
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{customCourseId}/assessmentresults?culture=en-US' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "customCourseId": "open-water-diver",
  "results": [
    { "sectionId": 1, "title": "Section 1", "isCompleted": true,  "score": 92 },
    { "sectionId": 2, "title": "Section 2", "isCompleted": false, "score": null }
  ]
}
Number of sections completed
derived: assessmentresults count where isCompleted
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{customCourseId}/assessmentresults?culture=en-US' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "customCourseId": "open-water-diver",
  "results": [
    { "sectionId": 1, "title": "Section 1", "isCompleted": true,  "score": 92 },
    { "sectionId": 2, "title": "Section 2", "isCompleted": false, "score": null }
  ]
}
Last opened timeno “last-accessed” field (details has dateStarted only) — confirm
2Certification status
FieldAPI → source
Course name
…/detailstitle
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{packageId}/details?culture=en-US&platform=PLP' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "packageId": 2270,
  "customCourseId": "open-water-diver",
  "title": "Open Water Diver",
  "heroUrl": "https://cdn.padi.com/…/hero.jpg",
  "status": "InProgress",
  "dateStarted": "2026-05-01T09:00:00Z",
  "sections": [ { "id": 1, "title": "Knowledge Dev.", "isCompleted": true } ]
}
Course status
…/detailsstatus
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{packageId}/details?culture=en-US&platform=PLP' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "packageId": 2270,
  "customCourseId": "open-water-diver",
  "title": "Open Water Diver",
  "heroUrl": "https://cdn.padi.com/…/hero.jpg",
  "status": "InProgress",
  "dateStarted": "2026-05-01T09:00:00Z",
  "sections": [ { "id": 1, "title": "Knowledge Dev.", "isCompleted": true } ]
}
Course image
…/detailsheroUrl
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{packageId}/details?culture=en-US&platform=PLP' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "packageId": 2270,
  "customCourseId": "open-water-diver",
  "title": "Open Water Diver",
  "heroUrl": "https://cdn.padi.com/…/hero.jpg",
  "status": "InProgress",
  "dateStarted": "2026-05-01T09:00:00Z",
  "sections": [ { "id": 1, "title": "Knowledge Dev.", "isCompleted": true } ]
}
1c

Certified / Active Diver

Mostly covered
Cert card, keep-learning, membership, specialities, events, badges.
eCard list semantics: GetAlleCardListPro returns every issued certification eCard for the affiliate — all completed certifications, not just the latest (expired ones, e.g. EFR, included with cardExpirationDate). In-progress courses never appear: a card only exists once certified. Variants: GeteCardListConsumer (consumer accounts), GeteCardTopPro/{n} (latest n cards — handy for this single-card widget), GetAllCardListPro (non-e cards). Certifications without an eCard still show in diveChek.certifications.
1Certification card
FieldAPI → source
Course name (completed cert)
eCard/GetAlleCardListProeCardInfo[].cardTitle
cURL
curl 'https://ecard.global-prod.padi.com/api/eCard/GetAlleCardListPro' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "versionNumber": 1,
  "affiliateSummary": {
    "affiliateID": 21613093, "fullName": "Jane Diver",
    "birthdate": "1990-04-12", "photo": "https://cdn.padi.com/…/diver.jpg"
  },
  "eCardInfo": [
    {
      "cardTitle": "Open Water Diver",
      "padiNumber": "21613093",
      "certDate": "2019-07-14",
      "cardExpirationDate": null,
      "licenseID": 987654, "eCardStockID": 123, "levelID": 5,
      "diverLine1": "Jane Diver",
      "instructorName": "John Pro", "storeName": "Blue Reef Dive",
      "qrCode": "https://ecard.padi.com/…/qr.png",
      "haseCard": true, "canPrint": true
    }
  ]
}
// every issued eCard (completed certs only) — in-progress courses never have a card;
// licenseID / eCardStockID / levelID are the per-card keys for client-side selection
Diver name
eCard → affiliateSummary.fullName / eCardInfo[].diverLine1
cURL
curl 'https://ecard.global-prod.padi.com/api/eCard/GetAlleCardListPro' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "versionNumber": 1,
  "affiliateSummary": {
    "affiliateID": 21613093, "fullName": "Jane Diver",
    "birthdate": "1990-04-12", "photo": "https://cdn.padi.com/…/diver.jpg"
  },
  "eCardInfo": [
    {
      "cardTitle": "Open Water Diver",
      "padiNumber": "21613093",
      "certDate": "2019-07-14",
      "cardExpirationDate": null,
      "licenseID": 987654, "eCardStockID": 123, "levelID": 5,
      "diverLine1": "Jane Diver",
      "instructorName": "John Pro", "storeName": "Blue Reef Dive",
      "qrCode": "https://ecard.padi.com/…/qr.png",
      "haseCard": true, "canPrint": true
    }
  ]
}
// every issued eCard (completed certs only) — in-progress courses never have a card;
// licenseID / eCardStockID / levelID are the per-card keys for client-side selection
Certified date
eCard → eCardInfo[].certDate
cURL
curl 'https://ecard.global-prod.padi.com/api/eCard/GetAlleCardListPro' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "versionNumber": 1,
  "affiliateSummary": {
    "affiliateID": 21613093, "fullName": "Jane Diver",
    "birthdate": "1990-04-12", "photo": "https://cdn.padi.com/…/diver.jpg"
  },
  "eCardInfo": [
    {
      "cardTitle": "Open Water Diver",
      "padiNumber": "21613093",
      "certDate": "2019-07-14",
      "cardExpirationDate": null,
      "licenseID": 987654, "eCardStockID": 123, "levelID": 5,
      "diverLine1": "Jane Diver",
      "instructorName": "John Pro", "storeName": "Blue Reef Dive",
      "qrCode": "https://ecard.padi.com/…/qr.png",
      "haseCard": true, "canPrint": true
    }
  ]
}
// every issued eCard (completed certs only) — in-progress courses never have a card;
// licenseID / eCardStockID / levelID are the per-card keys for client-side selection
Diver number
eCard → eCardInfo[].padiNumber
cURL
curl 'https://ecard.global-prod.padi.com/api/eCard/GetAlleCardListPro' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "versionNumber": 1,
  "affiliateSummary": {
    "affiliateID": 21613093, "fullName": "Jane Diver",
    "birthdate": "1990-04-12", "photo": "https://cdn.padi.com/…/diver.jpg"
  },
  "eCardInfo": [
    {
      "cardTitle": "Open Water Diver",
      "padiNumber": "21613093",
      "certDate": "2019-07-14",
      "cardExpirationDate": null,
      "licenseID": 987654, "eCardStockID": 123, "levelID": 5,
      "diverLine1": "Jane Diver",
      "instructorName": "John Pro", "storeName": "Blue Reef Dive",
      "qrCode": "https://ecard.padi.com/…/qr.png",
      "haseCard": true, "canPrint": true
    }
  ]
}
// every issued eCard (completed certs only) — in-progress courses never have a card;
// licenseID / eCardStockID / levelID are the per-card keys for client-side selection
eCard link & details
eCard → qrCode, haseCard, canPrint, affiliateSummary.photo
cURL
curl 'https://ecard.global-prod.padi.com/api/eCard/GetAlleCardListPro' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "versionNumber": 1,
  "affiliateSummary": {
    "affiliateID": 21613093, "fullName": "Jane Diver",
    "birthdate": "1990-04-12", "photo": "https://cdn.padi.com/…/diver.jpg"
  },
  "eCardInfo": [
    {
      "cardTitle": "Open Water Diver",
      "padiNumber": "21613093",
      "certDate": "2019-07-14",
      "cardExpirationDate": null,
      "licenseID": 987654, "eCardStockID": 123, "levelID": 5,
      "diverLine1": "Jane Diver",
      "instructorName": "John Pro", "storeName": "Blue Reef Dive",
      "qrCode": "https://ecard.padi.com/…/qr.png",
      "haseCard": true, "canPrint": true
    }
  ]
}
// every issued eCard (completed certs only) — in-progress courses never have a card;
// licenseID / eCardStockID / levelID are the per-card keys for client-side selection
View all certifications
full eCard list / diveChek.certifications
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
2Keep learning
FieldAPI → source
Course ids (owned, in-progress)
GET /v2/entitlements/{affiliateId}?filter=idcItems[].packageId
cURL
curl 'https://learning-prod.padi.com/learning/v2/entitlements/21613093?filter=idc' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "Items": [
    { "packageId": "522", "platform": "idc", "title": "Open Water Diver" }
  ]
}
// each item = a course the user owns; its packageId feeds /details & /report
Course name
GET /v2/courses/{packageId}/detailstitle
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{packageId}/details?culture=en-US&platform=PLP' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "packageId": 2270,
  "customCourseId": "open-water-diver",
  "title": "Open Water Diver",
  "heroUrl": "https://cdn.padi.com/…/hero.jpg",
  "status": "InProgress",
  "dateStarted": "2026-05-01T09:00:00Z",
  "sections": [ { "id": 1, "title": "Knowledge Dev.", "isCompleted": true } ]
}
Sections completed
assessmentresults (count isCompleted)
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{customCourseId}/assessmentresults?culture=en-US' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "customCourseId": "open-water-diver",
  "results": [
    { "sectionId": 1, "title": "Section 1", "isCompleted": true,  "score": 92 },
    { "sectionId": 2, "title": "Section 2", "isCompleted": false, "score": null }
  ]
}
% completion
derived from assessmentresults
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{customCourseId}/assessmentresults?culture=en-US' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "customCourseId": "open-water-diver",
  "results": [
    { "sectionId": 1, "title": "Section 1", "isCompleted": true,  "score": 92 },
    { "sectionId": 2, "title": "Section 2", "isCompleted": false, "score": null }
  ]
}
3Membership
FieldAPI → source
Status
pros/graphql member.memberStatus (or journey/clubmember.isMember)
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query { member { memberStatus memberSince autoRenewEnabled primaryCredentialName } renewalHistory { membershipExpires items { membershipType year last4 } } }" }'
Response · shape
{
  "data": {
    "member": {
      "memberStatus": "Active", "memberSince": "2015-03-01",
      "autoRenewEnabled": true, "primaryCredentialName": "Master Scuba Diver Trainer"
    },
    "renewalHistory": {
      "membershipExpires": "2026-12-31",
      "items": [ { "membershipType": "MSDT", "year": 2026, "last4": "4242" } ]
    }
  }
}
Renewal date
pros/graphql renewalHistory.membershipExpires
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query { member { memberStatus memberSince autoRenewEnabled primaryCredentialName } renewalHistory { membershipExpires items { membershipType year last4 } } }" }'
Response · shape
{
  "data": {
    "member": {
      "memberStatus": "Active", "memberSince": "2015-03-01",
      "autoRenewEnabled": true, "primaryCredentialName": "Master Scuba Diver Trainer"
    },
    "renewalHistory": {
      "membershipExpires": "2026-12-31",
      "items": [ { "membershipType": "MSDT", "year": 2026, "last4": "4242" } ]
    }
  }
}
Auto-renew (On/Off)
pros/graphql member.autoRenewEnabled
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query { member { memberStatus memberSince autoRenewEnabled primaryCredentialName } renewalHistory { membershipExpires items { membershipType year last4 } } }" }'
Response · shape
{
  "data": {
    "member": {
      "memberStatus": "Active", "memberSince": "2015-03-01",
      "autoRenewEnabled": true, "primaryCredentialName": "Master Scuba Diver Trainer"
    },
    "renewalHistory": {
      "membershipExpires": "2026-12-31",
      "items": [ { "membershipType": "MSDT", "year": 2026, "last4": "4242" } ]
    }
  }
}
Manage membership URLdeep-link
4Specialities (courses)
FieldAPI → source
Course image
GET /v2/courses?tag=recommendedimage.url (generic list — see below)
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses?tag=recommended' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
[
  {
    "packageId": 2270,
    "courseTitle": "Open Water Diver",
    "customCourseId": "open-water-diver",
    "tag": "recommended",
    "image": { "url": "https://cdn.padi.com/…/ow.jpg", "alt": "Open Water" }
  }
]
Course name
…?tag=recommendedcourseTitle
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses?tag=recommended' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
[
  {
    "packageId": 2270,
    "courseTitle": "Open Water Diver",
    "customCourseId": "open-water-diver",
    "tag": "recommended",
    "image": { "url": "https://cdn.padi.com/…/ow.jpg", "alt": "Open Water" }
  }
]
Filter to “specialties for your level”no dedicated specialties / cert-level endpoint verified — tag=recommended is generic; a catalog service (…/courses/expanded) exists but its host is env-configured. Confirm with PADI
Course details URLdeep-link
All courses linkdeep-link
5Events happening nearby
FieldAPI → source
Event image
adventure …/location/{locationPk}/activitiespicture
cURL
curl 'https://travel.padi.com/api/adventure/v1/search/location/956/activities/?uniq_activity=true'
Response · shape
{
  "results": [
    {
      "title": "Kelp Forest Dive",
      "picture": "https://cdn.travel.padi.com/…/kelp.jpg",
      "diveCenterTitle": "Blue Reef Dive",
      "activityPage": "https://travel.padi.com/d/kelp-forest-dive/"
    }
  ]
}
Event name
activitiestitle
cURL
curl 'https://travel.padi.com/api/adventure/v1/search/location/956/activities/?uniq_activity=true'
Response · shape
{
  "results": [
    {
      "title": "Kelp Forest Dive",
      "picture": "https://cdn.travel.padi.com/…/kelp.jpg",
      "diveCenterTitle": "Blue Reef Dive",
      "activityPage": "https://travel.padi.com/d/kelp-forest-dive/"
    }
  ]
}
Location (city, country)
location-info/nearby + activities
cURL
curl 'https://travel.padi.com/api/adventure/v1/search/location-info/nearby/?uniq_activity=true'
Response · shape
{
  "results": [
    { "pk": 956, "title": "San Diego", "country": "United States", "location_type": "city" }
  ]
}
Dive store name
activitiesdiveCenterTitle
cURL
curl 'https://travel.padi.com/api/adventure/v1/search/location/956/activities/?uniq_activity=true'
Response · shape
{
  "results": [
    {
      "title": "Kelp Forest Dive",
      "picture": "https://cdn.travel.padi.com/…/kelp.jpg",
      "diveCenterTitle": "Blue Reef Dive",
      "activityPage": "https://travel.padi.com/d/kelp-forest-dive/"
    }
  ]
}
Event link
activitiesactivityPage
cURL
curl 'https://travel.padi.com/api/adventure/v1/search/location/956/activities/?uniq_activity=true'
Response · shape
{
  "results": [
    {
      "title": "Kelp Forest Dive",
      "picture": "https://cdn.travel.padi.com/…/kelp.jpg",
      "diveCenterTitle": "Blue Reef Dive",
      "activityPage": "https://travel.padi.com/d/kelp-forest-dive/"
    }
  ]
}
View all nearby
adventure search (location/{locationPk}/activities, paged)
cURL
curl 'https://travel.padi.com/api/adventure/v1/search/location/956/activities/?uniq_activity=true'
Response · shape
{
  "results": [
    {
      "title": "Kelp Forest Dive",
      "picture": "https://cdn.travel.padi.com/…/kelp.jpg",
      "diveCenterTitle": "Blue Reef Dive",
      "activityPage": "https://travel.padi.com/d/kelp-forest-dive/"
    }
  ]
}
6Badges
FieldAPI → source
Badge name
accredible …/recipient/credentials/{global_uid}credential.name
cURL
curl 'https://api.accredible.com/v1/recipient/credentials/<global_uid>' \
  -H 'Authorization: Bearer <accredibleToken>' -H 'X-Signature: <hmac-sha256>' -H 'X-Timestamp: <ts>'
Response · shape
{
  "credentials": [
    {
      "id": 12345,
      "name": "Open Water Diver",
      "badge_image": "https://cdn.accredible.com/…/badge.png",
      "issued_on": "2019-07-14"
    }
  ]
}
Badge image
accrediblebadge_image
cURL
curl 'https://api.accredible.com/v1/recipient/credentials/<global_uid>' \
  -H 'Authorization: Bearer <accredibleToken>' -H 'X-Signature: <hmac-sha256>' -H 'X-Timestamp: <ts>'
Response · shape
{
  "credentials": [
    {
      "id": 12345,
      "name": "Open Water Diver",
      "badge_image": "https://cdn.accredible.com/…/badge.png",
      "issued_on": "2019-07-14"
    }
  ]
}
Total badges earned
derived: count of credentials
cURL
curl 'https://api.accredible.com/v1/recipient/credentials/<global_uid>' \
  -H 'Authorization: Bearer <accredibleToken>' -H 'X-Signature: <hmac-sha256>' -H 'X-Timestamp: <ts>'
Response · shape
{
  "credentials": [
    {
      "id": 12345,
      "name": "Open Water Diver",
      "badge_image": "https://cdn.accredible.com/…/badge.png",
      "issued_on": "2019-07-14"
    }
  ]
}
1d

Keep — Certified / Active Diver

Partial
ReActivate a deactivated course + certification tile.
1Deactivated course (ReActivate)
FieldAPI → source
Course image
…/courses/{packageId}/detailsheroUrl
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{packageId}/details?culture=en-US&platform=PLP' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "packageId": 2270,
  "customCourseId": "open-water-diver",
  "title": "Open Water Diver",
  "heroUrl": "https://cdn.padi.com/…/hero.jpg",
  "status": "InProgress",
  "dateStarted": "2026-05-01T09:00:00Z",
  "sections": [ { "id": 1, "title": "Knowledge Dev.", "isCompleted": true } ]
}
Course description
course details / CMS
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{packageId}/details?culture=en-US&platform=PLP' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "packageId": 2270,
  "customCourseId": "open-water-diver",
  "title": "Open Water Diver",
  "heroUrl": "https://cdn.padi.com/…/hero.jpg",
  "status": "InProgress",
  "dateStarted": "2026-05-01T09:00:00Z",
  "sections": [ { "id": 1, "title": "Knowledge Dev.", "isCompleted": true } ]
}
Link to activatedeep-link (ReActivate flow)
2Certification
FieldAPI → source
Certification image
eCard → photo / stock image
cURL
curl 'https://ecard.global-prod.padi.com/api/eCard/GetAlleCardListPro' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "versionNumber": 1,
  "affiliateSummary": {
    "affiliateID": 21613093, "fullName": "Jane Diver",
    "birthdate": "1990-04-12", "photo": "https://cdn.padi.com/…/diver.jpg"
  },
  "eCardInfo": [
    {
      "cardTitle": "Open Water Diver",
      "padiNumber": "21613093",
      "certDate": "2019-07-14",
      "cardExpirationDate": null,
      "licenseID": 987654, "eCardStockID": 123, "levelID": 5,
      "diverLine1": "Jane Diver",
      "instructorName": "John Pro", "storeName": "Blue Reef Dive",
      "qrCode": "https://ecard.padi.com/…/qr.png",
      "haseCard": true, "canPrint": true
    }
  ]
}
// every issued eCard (completed certs only) — in-progress courses never have a card;
// licenseID / eCardStockID / levelID are the per-card keys for client-side selection
Certification name
eCard → cardTitle
cURL
curl 'https://ecard.global-prod.padi.com/api/eCard/GetAlleCardListPro' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "versionNumber": 1,
  "affiliateSummary": {
    "affiliateID": 21613093, "fullName": "Jane Diver",
    "birthdate": "1990-04-12", "photo": "https://cdn.padi.com/…/diver.jpg"
  },
  "eCardInfo": [
    {
      "cardTitle": "Open Water Diver",
      "padiNumber": "21613093",
      "certDate": "2019-07-14",
      "cardExpirationDate": null,
      "licenseID": 987654, "eCardStockID": 123, "levelID": 5,
      "diverLine1": "Jane Diver",
      "instructorName": "John Pro", "storeName": "Blue Reef Dive",
      "qrCode": "https://ecard.padi.com/…/qr.png",
      "haseCard": true, "canPrint": true
    }
  ]
}
// every issued eCard (completed certs only) — in-progress courses never have a card;
// licenseID / eCardStockID / levelID are the per-card keys for client-side selection
Status
derived / eCard
cURL
curl 'https://ecard.global-prod.padi.com/api/eCard/GetAlleCardListPro' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "versionNumber": 1,
  "affiliateSummary": {
    "affiliateID": 21613093, "fullName": "Jane Diver",
    "birthdate": "1990-04-12", "photo": "https://cdn.padi.com/…/diver.jpg"
  },
  "eCardInfo": [
    {
      "cardTitle": "Open Water Diver",
      "padiNumber": "21613093",
      "certDate": "2019-07-14",
      "cardExpirationDate": null,
      "licenseID": 987654, "eCardStockID": 123, "levelID": 5,
      "diverLine1": "Jane Diver",
      "instructorName": "John Pro", "storeName": "Blue Reef Dive",
      "qrCode": "https://ecard.padi.com/…/qr.png",
      "haseCard": true, "canPrint": true
    }
  ]
}
// every issued eCard (completed certs only) — in-progress courses never have a card;
// licenseID / eCardStockID / levelID are the per-card keys for client-side selection
View all linkdeep-link
1e

Teach — Pro / Instructor

Mostly covered
Membership, teaching credentials, in-progress certs, badges.
1Membership
FieldAPI → source
Plan name
pros/graphql renewalHistory.items.membershipType / member.primaryCredentialName
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query { member { memberStatus memberSince autoRenewEnabled primaryCredentialName } renewalHistory { membershipExpires items { membershipType year last4 } } }" }'
Response · shape
{
  "data": {
    "member": {
      "memberStatus": "Active", "memberSince": "2015-03-01",
      "autoRenewEnabled": true, "primaryCredentialName": "Master Scuba Diver Trainer"
    },
    "renewalHistory": {
      "membershipExpires": "2026-12-31",
      "items": [ { "membershipType": "MSDT", "year": 2026, "last4": "4242" } ]
    }
  }
}
Status
pros/graphql member.memberStatus
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query { member { memberStatus memberSince autoRenewEnabled primaryCredentialName } renewalHistory { membershipExpires items { membershipType year last4 } } }" }'
Response · shape
{
  "data": {
    "member": {
      "memberStatus": "Active", "memberSince": "2015-03-01",
      "autoRenewEnabled": true, "primaryCredentialName": "Master Scuba Diver Trainer"
    },
    "renewalHistory": {
      "membershipExpires": "2026-12-31",
      "items": [ { "membershipType": "MSDT", "year": 2026, "last4": "4242" } ]
    }
  }
}
Auto renew (On/Off)
pros/graphql member.autoRenewEnabled
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query { member { memberStatus memberSince autoRenewEnabled primaryCredentialName } renewalHistory { membershipExpires items { membershipType year last4 } } }" }'
Response · shape
{
  "data": {
    "member": {
      "memberStatus": "Active", "memberSince": "2015-03-01",
      "autoRenewEnabled": true, "primaryCredentialName": "Master Scuba Diver Trainer"
    },
    "renewalHistory": {
      "membershipExpires": "2026-12-31",
      "items": [ { "membershipType": "MSDT", "year": 2026, "last4": "4242" } ]
    }
  }
}
Renewal date
pros/graphql renewalHistory.membershipExpires
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query { member { memberStatus memberSince autoRenewEnabled primaryCredentialName } renewalHistory { membershipExpires items { membershipType year last4 } } }" }'
Response · shape
{
  "data": {
    "member": {
      "memberStatus": "Active", "memberSince": "2015-03-01",
      "autoRenewEnabled": true, "primaryCredentialName": "Master Scuba Diver Trainer"
    },
    "renewalHistory": {
      "membershipExpires": "2026-12-31",
      "items": [ { "membershipType": "MSDT", "year": 2026, "last4": "4242" } ]
    }
  }
}
2Completed certifications & teaching credentials
FieldAPI → source
Certification name
pros/graphql proChek.credentials.name
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
Teaching status (Active/Inactive + year)
proChek isAuthorizedToTeach + expirationDate
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
View all linkdeep-link
3Certifications in progress
FieldAPI → source
Course ids (owned, in-progress)
GET /v2/entitlements/{affiliateId}?filter=idcItems[].packageId
cURL
curl 'https://learning-prod.padi.com/learning/v2/entitlements/21613093?filter=idc' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "Items": [
    { "packageId": "522", "platform": "idc", "title": "Open Water Diver" }
  ]
}
// each item = a course the user owns; its packageId feeds /details & /report
Certification name
…/courses/{packageId}/detailstitle
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{packageId}/details?culture=en-US&platform=PLP' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "packageId": 2270,
  "customCourseId": "open-water-diver",
  "title": "Open Water Diver",
  "heroUrl": "https://cdn.padi.com/…/hero.jpg",
  "status": "InProgress",
  "dateStarted": "2026-05-01T09:00:00Z",
  "sections": [ { "id": 1, "title": "Knowledge Dev.", "isCompleted": true } ]
}
Certification description
course details / CMS
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{packageId}/details?culture=en-US&platform=PLP' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "packageId": 2270,
  "customCourseId": "open-water-diver",
  "title": "Open Water Diver",
  "heroUrl": "https://cdn.padi.com/…/hero.jpg",
  "status": "InProgress",
  "dateStarted": "2026-05-01T09:00:00Z",
  "sections": [ { "id": 1, "title": "Knowledge Dev.", "isCompleted": true } ]
}
% completion
derived from assessmentresults
cURL
curl 'https://learning-prod.padi.com/learning/v2/courses/{customCourseId}/assessmentresults?culture=en-US' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "customCourseId": "open-water-diver",
  "results": [
    { "sectionId": 1, "title": "Section 1", "isCompleted": true,  "score": 92 },
    { "sectionId": 2, "title": "Section 2", "isCompleted": false, "score": null }
  ]
}
Link to coursedeep-link
4Badges earned
FieldAPI → source
Badge name
pros/graphql proLinks (achievements) / accredible
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query proLinks($query: ProSiteLinksTypeInput!){ proLinks(query:$query){ items { name value } total } }", "variables":{ "query":{ "proLinkNames":["achievements"] } } }'
Response · shape
{
  "data": {
    "proLinks": {
      "items": [ { "name": "achievements", "value": "https://…/achievements" } ],
      "total": 1
    }
  }
}
Badge image
accrediblebadge_image
cURL
curl 'https://api.accredible.com/v1/recipient/credentials/<global_uid>' \
  -H 'Authorization: Bearer <accredibleToken>' -H 'X-Signature: <hmac-sha256>' -H 'X-Timestamp: <ts>'
Response · shape
{
  "credentials": [
    {
      "id": 12345,
      "name": "Open Water Diver",
      "badge_image": "https://cdn.accredible.com/…/badge.png",
      "issued_on": "2019-07-14"
    }
  ]
}
1f

Teach — Dive Shop

Partial
Dive-shop business view + membership.
pros/graphql is the production API behind PADI’s own pro.padi.com portal — the member query is captured verbatim from its live traffic; storeInfo / renewalHistory field lists come from the pros-app discovery documented in the master reference. Endpoint is live (unauthenticated calls get 401) and its CORS policy already allows the www.padi.com origin, so MyPADI can call it from the browser. storeInfo/memberInfo only resolve for store/pro-affiliated accounts.
1Dive shop
FieldAPI → source
Shop name
pros/graphql storeInfo.name
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($s:StoreInfoInput){ storeInfo(input:$s){ name city address { addressLine1 country postalCode } } }", "variables":{} }'
Response · shape
{
  "data": {
    "storeInfo": {
      "name": "Blue Reef Dive Center",
      "city": "San Diego",
      "address": { "addressLine1": "1 Ocean Way", "country": "US", "postalCode": "92101" }
    }
  }
}
Shop address
pros/graphql storeInfo.address
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($s:StoreInfoInput){ storeInfo(input:$s){ name city address { addressLine1 country postalCode } } }", "variables":{} }'
Response · shape
{
  "data": {
    "storeInfo": {
      "name": "Blue Reef Dive Center",
      "city": "San Diego",
      "address": { "addressLine1": "1 Ocean Way", "country": "US", "postalCode": "92101" }
    }
  }
}
Rating (CDC star)source TBC — dive-centers.starLabel is the Adventures directory; confirm store rating
2Membership
FieldAPI → source
Plan name
pros/graphql renewalHistory.items.membershipType
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query { member { memberStatus memberSince autoRenewEnabled primaryCredentialName } renewalHistory { membershipExpires items { membershipType year last4 } } }" }'
Response · shape
{
  "data": {
    "member": {
      "memberStatus": "Active", "memberSince": "2015-03-01",
      "autoRenewEnabled": true, "primaryCredentialName": "Master Scuba Diver Trainer"
    },
    "renewalHistory": {
      "membershipExpires": "2026-12-31",
      "items": [ { "membershipType": "MSDT", "year": 2026, "last4": "4242" } ]
    }
  }
}
Auto renew status
pros/graphql member.autoRenewEnabled
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query { member { memberStatus memberSince autoRenewEnabled primaryCredentialName } renewalHistory { membershipExpires items { membershipType year last4 } } }" }'
Response · shape
{
  "data": {
    "member": {
      "memberStatus": "Active", "memberSince": "2015-03-01",
      "autoRenewEnabled": true, "primaryCredentialName": "Master Scuba Diver Trainer"
    },
    "renewalHistory": {
      "membershipExpires": "2026-12-31",
      "items": [ { "membershipType": "MSDT", "year": 2026, "last4": "4242" } ]
    }
  }
}
Expiry date
pros/graphql renewalHistory.membershipExpires
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query { member { memberStatus memberSince autoRenewEnabled primaryCredentialName } renewalHistory { membershipExpires items { membershipType year last4 } } }" }'
Response · shape
{
  "data": {
    "member": {
      "memberStatus": "Active", "memberSince": "2015-03-01",
      "autoRenewEnabled": true, "primaryCredentialName": "Master Scuba Diver Trainer"
    },
    "renewalHistory": {
      "membershipExpires": "2026-12-31",
      "items": [ { "membershipType": "MSDT", "year": 2026, "last4": "4242" } ]
    }
  }
}
View plan linkdeep-link
1g

EFR — First-aid only user

Mostly covered
Single EFR certification tile.
1Certification
FieldAPI → source
Name
proChek / diveChek / eCard (EFR credential name)
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
Completed date
diveChek.certificationDate / eCard certDate
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
Expiry date
proChek.expirationDate / eCard cardExpirationDate
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
Renew linkdeep-link
Find EFR instructor linkdeep-link (locator)
2a

Profile & Identity

Mostly covered
Editable identity + communication preferences — reads and updates.
Two preference systems (consolidation is an open question with PADI): diver preferencesapi.core-prod.padi.com/preference/v1/preference, named category flags (diveAbroad, localDiving, environmentConservation, events, diveCentricTrips, padiCommunications, thirdParty) — and email preferences (SFMC)prefapi.scubadiving.com/recipient, where preferenceId is numeric (captured ids in the 1001001–1001023 range, status 0/1). Which wireframe toggle maps to which flag / numeric id is still to confirm.
1Identity — read
FieldAPI → source
First name
GET /profiles/{affiliateId}firstName
cURL
curl 'https://learning-prod.padi.com/profiles/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "affiliateId": 21613093,
  "firstName": "Jane",
  "lastName": "Diver",
  "fullName": "Jane Diver",
  "photoUrl": "https://cdn.padi.com/…/photo.jpg",
  "dob": "1990-04-12",
  "primaryEmailAddress": "jane@example.com",
  "phoneNumber": "+1 555 0100",
  "mailingAddress": {
    "addressLine1": "1 Ocean Way", "city": "San Diego",
    "state": "CA", "postalCode": "92101", "country": "US"
  }
}
Last name
GET /profiles/{affiliateId}lastName
cURL
curl 'https://learning-prod.padi.com/profiles/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "affiliateId": 21613093,
  "firstName": "Jane",
  "lastName": "Diver",
  "fullName": "Jane Diver",
  "photoUrl": "https://cdn.padi.com/…/photo.jpg",
  "dob": "1990-04-12",
  "primaryEmailAddress": "jane@example.com",
  "phoneNumber": "+1 555 0100",
  "mailingAddress": {
    "addressLine1": "1 Ocean Way", "city": "San Diego",
    "state": "CA", "postalCode": "92101", "country": "US"
  }
}
Date of birth
GET /profiles/{affiliateId}dob
cURL
curl 'https://learning-prod.padi.com/profiles/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "affiliateId": 21613093,
  "firstName": "Jane",
  "lastName": "Diver",
  "fullName": "Jane Diver",
  "photoUrl": "https://cdn.padi.com/…/photo.jpg",
  "dob": "1990-04-12",
  "primaryEmailAddress": "jane@example.com",
  "phoneNumber": "+1 555 0100",
  "mailingAddress": {
    "addressLine1": "1 Ocean Way", "city": "San Diego",
    "state": "CA", "postalCode": "92101", "country": "US"
  }
}
Email
GET /profiles/{affiliateId}primaryEmailAddress
cURL
curl 'https://learning-prod.padi.com/profiles/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "affiliateId": 21613093,
  "firstName": "Jane",
  "lastName": "Diver",
  "fullName": "Jane Diver",
  "photoUrl": "https://cdn.padi.com/…/photo.jpg",
  "dob": "1990-04-12",
  "primaryEmailAddress": "jane@example.com",
  "phoneNumber": "+1 555 0100",
  "mailingAddress": {
    "addressLine1": "1 Ocean Way", "city": "San Diego",
    "state": "CA", "postalCode": "92101", "country": "US"
  }
}
Phone
GET /profiles/{affiliateId}phoneNumber
cURL
curl 'https://learning-prod.padi.com/profiles/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "affiliateId": 21613093,
  "firstName": "Jane",
  "lastName": "Diver",
  "fullName": "Jane Diver",
  "photoUrl": "https://cdn.padi.com/…/photo.jpg",
  "dob": "1990-04-12",
  "primaryEmailAddress": "jane@example.com",
  "phoneNumber": "+1 555 0100",
  "mailingAddress": {
    "addressLine1": "1 Ocean Way", "city": "San Diego",
    "state": "CA", "postalCode": "92101", "country": "US"
  }
}
Address
GET /profiles/{affiliateId}mailingAddress{…}
cURL
curl 'https://learning-prod.padi.com/profiles/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "affiliateId": 21613093,
  "firstName": "Jane",
  "lastName": "Diver",
  "fullName": "Jane Diver",
  "photoUrl": "https://cdn.padi.com/…/photo.jpg",
  "dob": "1990-04-12",
  "primaryEmailAddress": "jane@example.com",
  "phoneNumber": "+1 555 0100",
  "mailingAddress": {
    "addressLine1": "1 Ocean Way", "city": "San Diego",
    "state": "CA", "postalCode": "92101", "country": "US"
  }
}
2Identity — update (form submit)
FieldAPI → source
Update name / DOB / gender
PUT auth/api/user/update/{email} — payload {firstName, lastName, middleName, birthDate, gender…}
cURL
curl -X PUT 'https://api.global-prod.padi.com/auth/api/user/update/jane@example.com' \
  -H 'Authorization: Bearer <idToken>' -H 'Content-Type: application/json' \
  -d '{ "affiliateId": 21613093, "firstName": "Jane", "lastName": "Diver", "middleName": "", "birthDate": "1990-04-12", "gender": "F", "clientId": "<clientId>" }'
Response · shape
{ "result": true, "message": "OK" }
// documented shape: { result, message }
Update address
POST /profiles/{affiliateId}/MailingAddress — payload {addressLine1-2, city, countryId, stateId, postalCode}
cURL
curl -X POST 'https://learning-prod.padi.com/profiles/21613093/MailingAddress' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "addressLine1": "1 Ocean Way", "addressLine2": "", "city": "San Diego", "countryId": 1, "postalCode": "92101", "stateId": 5 }'
Update photo
POST api.padi.com/p/photos/web/certification/upload — multipart file + office (captured)
cURL
curl -X POST 'https://api.padi.com/p/photos/web/certification/upload' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' \
  -F 'file=@photo.png;type=image/png' \
  -F 'office=HQ'
# multipart/form-data, captured from learning.padi.com — parts: file (the image) + office (e.g. "HQ")
Response · shape
{
  "affiliateId": 21613093,
  "identifier": "…",
  "preSignedURL": "https://s3.…/upload?X-Amz-…",
  "status": "pending",
  "photoType": "certification",
  "s3key": "…", "contentType": "image/jpeg", "fileSize": 123456,
  "uploadedAt": "2026-07-14T09:00:00Z", "reviewedAt": null, "rejectionReason": null
}
// photo record as documented — preSignedURL is the stored photo's access URL, not an upload target
Communication language
read profiles.languageCommunicationPreference · update PUT …/user/update/language/{email}
cURL
curl -X PUT 'https://api.global-prod.padi.com/auth/api/user/update/language/jane@example.com' \
  -H 'Authorization: Bearer <idToken>' -H 'Content-Type: application/json' \
  -d '{ "userName": "jane@example.com", "languageCode": "en-US" }'
Response · shape
{ "result": true, "message": "OK" }
// documented shape: { result, message }
Change password
POST auth/api/password/change — body {username, oldPassword, newPassword, clientId} (captured)
cURL
curl -X POST 'https://api.global-prod.padi.com/auth/api/password/change' \
  -H 'Authorization: Bearer <idToken>' -H 'Content-Type: application/json' \
  -d '{ "username": "jane@example.com", "oldPassword": "<current>", "newPassword": "<new>", "clientId": "<clientId>" }'
# captured from learning.padi.com — username = the account email; clientId = the calling app's Cognito client id
Update email / phoneno verified endpoint — email is the Cognito login (auth-flow change, not in user/update payload); phone has no update path in the captures. Confirm with PADI
3Communication preferences
FieldAPI → source
Course tips & learning reminders
SFMC numeric pref via prefapi …/recipient (id TBC)
cURL
curl 'https://prefapi.scubadiving.com/recipient?global_uid=<global_uid>' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "prefs": [
    { "preferenceId": "1001015", "status": 1 },
    { "preferenceId": "1001016", "status": 0 },
    { "preferenceId": "1001001", "status": 1 }
  ],
  "keys": { "global_uid": "7dc70cdf-…" }
}
// preferenceId IS numeric (captured range 1001001–1001023, status 0/1);
// toggle-label → numeric-id mapping still to confirm
Local dive events near me
diver-preference flags localDiving / events
cURL
curl 'https://api.core-prod.padi.com/preference/v1/preference/0030N000034rdwSQAQ' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "id": "0030N000034rdwSQAQ",
  "diveAbroad": true,
  "localDiving": false,
  "environmentConservation": true,
  "events": true,
  "diveCentricTrips": false,
  "padiCommunications": true,
  "thirdParty": false
}
// named category flags (as documented) — full payload shape to confirm
Offers and promotions
diver-preference flags padiCommunications / thirdParty
cURL
curl 'https://api.core-prod.padi.com/preference/v1/preference/0030N000034rdwSQAQ' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "id": "0030N000034rdwSQAQ",
  "diveAbroad": true,
  "localDiving": false,
  "environmentConservation": true,
  "events": true,
  "diveCentricTrips": false,
  "padiCommunications": true,
  "thirdParty": false
}
// named category flags (as documented) — full payload shape to confirm
Save toggles — diver preferences
POST /v1/preference · PUT /v1/preference/{recipientId} (body to confirm)
cURL
curl -X PUT 'https://api.core-prod.padi.com/preference/v1/preference/{recipientId}' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "padiCommunications": true, "localDiving": false, "events": true }'
# POST /v1/preference creates; PUT /v1/preference/{id} updates — body schema not captured, confirm
Save toggles — email prefs (SFMC)
POST prefapi …/recipientprefs[]{preferenceId, status} + keys.global_uid (captured)
cURL
curl -X POST 'https://prefapi.scubadiving.com/recipient' \
  -H 'Authorization: Bearer <idToken>' -H 'Content-Type: application/json' \
  -d '{ "prefs": [ { "preferenceId": "1001015", "status": 1 }, { "preferenceId": "1001016", "status": 0 } ], "keys": { "global_uid": "<global_uid>" } }'
Unsubscribe (email opt-out)
POST /v1/unsubscribe — body {id, sfm_jobid, padiCommunications, thirdParty, communicationLanguage}
cURL
curl -X POST 'https://api.core-prod.padi.com/preference/v1/unsubscribe' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "id": "<recipientId>", "sfm_jobid": "", "padiCommunications": false, "thirdParty": false, "communicationLanguage": "en-US" }'
2b

Certification History

Mostly covered
Teaching credentials + diver certifications.
Per-card “View eCard” links: the eCard API has no single-card fetch — PADI’s own app pulls the full list and filters client-side. Each eCardInfo[] item carries stable keys (licenseID, eCardStockID, levelID), so the row’s link carries one of these and selects from the already-fetched list — the history table itself renders from the same response, so no extra call is needed (pass the key in the route and re-filter after a refetch). A single-card fetch / server-side filter is already an open ask with PADI (master doc, open question #4).
1Teaching credentials
FieldAPI → source
Credential name
pros/graphql proChek.credentials.name
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
Issued year
proChek (issued date field — confirm)
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
Status
proChek isRenewed / isAuthorizedToTeach
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
View eCard link
select from fetched list by eCardInfo[].licenseID / eCardStockID — no single-card GET
cURL
curl 'https://ecard.global-prod.padi.com/api/eCard/GetAlleCardListPro' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "versionNumber": 1,
  "affiliateSummary": {
    "affiliateID": 21613093, "fullName": "Jane Diver",
    "birthdate": "1990-04-12", "photo": "https://cdn.padi.com/…/diver.jpg"
  },
  "eCardInfo": [
    {
      "cardTitle": "Open Water Diver",
      "padiNumber": "21613093",
      "certDate": "2019-07-14",
      "cardExpirationDate": null,
      "licenseID": 987654, "eCardStockID": 123, "levelID": 5,
      "diverLine1": "Jane Diver",
      "instructorName": "John Pro", "storeName": "Blue Reef Dive",
      "qrCode": "https://ecard.padi.com/…/qr.png",
      "haseCard": true, "canPrint": true
    }
  ]
}
// every issued eCard (completed certs only) — in-progress courses never have a card;
// licenseID / eCardStockID / levelID are the per-card keys for client-side selection
2Diver certifications
FieldAPI → source
Certification name
diveChek.certifications.name / eCard cardTitle
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
Date
diveChek.certificationDate / eCard certDate
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
Instructor / shop name
diveChek.instructorName / storeName
cURL
curl -X POST 'https://api.pro-prod.padi.com/pros/graphql' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093' -H 'Content-Type: application/json' \
  -d '{ "query":"query($d:DiveChekInput,$p:ProChekInput){ diveChek(input:$d){ certifications { name certificationDate instructorName storeName } } proChek(input:$p){ credentials { name code expirationDate isAuthorizedToTeach isRenewed } } }", "variables":{} }'
Response · shape
{
  "data": {
    "diveChek": {
      "certifications": [
        { "name": "Open Water Diver", "certificationDate": "2019-07-14",
          "instructorName": "John Pro", "storeName": "Blue Reef Dive" }
      ]
    },
    "proChek": {
      "credentials": [
        { "name": "Open Water Scuba Instructor", "code": "OWSI",
          "expirationDate": "2026-12-31",
          "isAuthorizedToTeach": true, "isRenewed": true }
      ]
    }
  }
}
View eCard link
select from fetched list by eCardInfo[].licenseID / eCardStockID — no single-card GET
cURL
curl 'https://ecard.global-prod.padi.com/api/eCard/GetAlleCardListPro' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
{
  "versionNumber": 1,
  "affiliateSummary": {
    "affiliateID": 21613093, "fullName": "Jane Diver",
    "birthdate": "1990-04-12", "photo": "https://cdn.padi.com/…/diver.jpg"
  },
  "eCardInfo": [
    {
      "cardTitle": "Open Water Diver",
      "padiNumber": "21613093",
      "certDate": "2019-07-14",
      "cardExpirationDate": null,
      "licenseID": 987654, "eCardStockID": 123, "levelID": 5,
      "diverLine1": "Jane Diver",
      "instructorName": "John Pro", "storeName": "Blue Reef Dive",
      "qrCode": "https://ecard.padi.com/…/qr.png",
      "haseCard": true, "canPrint": true
    }
  ]
}
// every issued eCard (completed certs only) — in-progress courses never have a card;
// licenseID / eCardStockID / levelID are the per-card keys for client-side selection
2c

Purchase History

Gap
Cross-property orders — Store & Purchases.
No API today. There is no order / purchase-history or receipt endpoint, and the storefront is mid-migration — Purchase History can’t be wired yet. Carry it forward and integrate against whatever the new store exposes.
1Orders
FieldAPI → source
Dateno order-history API today
Order numberno order-history API today
Itemsno order-history API today
Total amountno order-history API today
Statusno order-history API today
Invoice link (download)no receipt / invoice API today
Filter (Courses / Gear / Membership / All)depends on the above — no API
2d

Wallet

Partial
Saved payment card(s).
Verified, not assumed: getcarddata is captured verbatim from pro.padi.com traffic — request and response (array of {brand, expMonth, expYear, last4}, brand lowercase) — and the endpoint is live (unauthenticated calls get 401). The GraphQL paymentDetails query is a documented alternative that adds cardHolderName / cardTypeName. Two confirms remain: no default-card flag exists in either payload, and the capture came from a pro session — confirm the same endpoint serves consumer/Club accounts.
1Card
FieldAPI → source
Card last 4 digits
pros/stripe/getcarddata/1/{affiliateId}[].last4
cURL
curl 'https://api.pro-prod.padi.com/pros/stripe/getcarddata/1/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
[
  { "brand": "visa", "expMonth": 3, "expYear": 2029, "last4": "0291" }
]
// captured verbatim from pro.padi.com — array of saved cards, brand lowercase;
// no "default card" flag in the payload
Visa / Mastercard
getcarddata[].brand (lowercase, e.g. “visa”)
cURL
curl 'https://api.pro-prod.padi.com/pros/stripe/getcarddata/1/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
[
  { "brand": "visa", "expMonth": 3, "expYear": 2029, "last4": "0291" }
]
// captured verbatim from pro.padi.com — array of saved cards, brand lowercase;
// no "default card" flag in the payload
Is default card?no flag in getcarddata or paymentDetails — confirm
Expiry date
getcarddata[].expMonth / [].expYear
cURL
curl 'https://api.pro-prod.padi.com/pros/stripe/getcarddata/1/21613093' \
  -H 'Authorization: Bearer <idToken>' -H 'affiliate-id: 21613093'
Response · shape
[
  { "brand": "visa", "expMonth": 3, "expYear": 2029, "last4": "0291" }
]
// captured verbatim from pro.padi.com — array of saved cards, brand lowercase;
// no "default card" flag in the payload
2e

Booked dive trips

Mostly covered
Upcoming & past PADI Travel bookings.
Verified, not assumed: account/bookings is captured verbatim from travel.padi.com live traffic — the exact request (incl. page / page_size / is_affiliate / is_past params and the Cognito idToken as Bearer) and both response shapes (populated and empty {next, prev, results[], count}). The endpoint is live: unauthenticated calls return 401 (“Authentication credentials were not provided”). One confirm: vacation.status is a numeric code (captured 100) — the code → label mapping needs PADI’s enum.
1Upcoming trip
FieldAPI → source
Image
travel account/bookingsvacation.thumbnails{…} (object keyed by view size)
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=false' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "id": 20617,
        "uuid": "4f624186-ee7c-4f28-8f83-edab177111ce",
        "reference": "NSEAEQ",
        "shopId": 23397, "shopSlug": "rosen-plaza",
        "shopTitle": "Rosen Plaza",
        "shopLocationSlug": "united-states-of-america-usa",
        "shopRating": null, "shopNumberOfReviews": 0,
        "status": 100, "gisStatus": 20,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "duration": 5, "pax": 1,
        "amountTotal": "1090.00", "currency": "USD",
        "hasPaymentMethod": true, "isActive": false,
        "thumbnails": {
          "GridSearchResultDesktop": "https://d2p1cf6997m1ir.cloudfront.net/media/thumbnails/…webp",
          "GridSearchResultMobilePort": "https://…webp", "DOSliderDesktop": "https://…webp"
        }
      }
    }
  ]
}
// captured verbatim from travel.padi.com — thumbnails is an object keyed by view size;
// status is numeric (captured 100) — code → label mapping to confirm
Trip name
vacation.shopTitle / itinerary
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=false' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "id": 20617,
        "uuid": "4f624186-ee7c-4f28-8f83-edab177111ce",
        "reference": "NSEAEQ",
        "shopId": 23397, "shopSlug": "rosen-plaza",
        "shopTitle": "Rosen Plaza",
        "shopLocationSlug": "united-states-of-america-usa",
        "shopRating": null, "shopNumberOfReviews": 0,
        "status": 100, "gisStatus": 20,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "duration": 5, "pax": 1,
        "amountTotal": "1090.00", "currency": "USD",
        "hasPaymentMethod": true, "isActive": false,
        "thumbnails": {
          "GridSearchResultDesktop": "https://d2p1cf6997m1ir.cloudfront.net/media/thumbnails/…webp",
          "GridSearchResultMobilePort": "https://…webp", "DOSliderDesktop": "https://…webp"
        }
      }
    }
  ]
}
// captured verbatim from travel.padi.com — thumbnails is an object keyed by view size;
// status is numeric (captured 100) — code → label mapping to confirm
Location
vacation.shopLocationSlug
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=false' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "id": 20617,
        "uuid": "4f624186-ee7c-4f28-8f83-edab177111ce",
        "reference": "NSEAEQ",
        "shopId": 23397, "shopSlug": "rosen-plaza",
        "shopTitle": "Rosen Plaza",
        "shopLocationSlug": "united-states-of-america-usa",
        "shopRating": null, "shopNumberOfReviews": 0,
        "status": 100, "gisStatus": 20,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "duration": 5, "pax": 1,
        "amountTotal": "1090.00", "currency": "USD",
        "hasPaymentMethod": true, "isActive": false,
        "thumbnails": {
          "GridSearchResultDesktop": "https://d2p1cf6997m1ir.cloudfront.net/media/thumbnails/…webp",
          "GridSearchResultMobilePort": "https://…webp", "DOSliderDesktop": "https://…webp"
        }
      }
    }
  ]
}
// captured verbatim from travel.padi.com — thumbnails is an object keyed by view size;
// status is numeric (captured 100) — code → label mapping to confirm
Status
vacation.status (numeric code → label)
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=false' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "id": 20617,
        "uuid": "4f624186-ee7c-4f28-8f83-edab177111ce",
        "reference": "NSEAEQ",
        "shopId": 23397, "shopSlug": "rosen-plaza",
        "shopTitle": "Rosen Plaza",
        "shopLocationSlug": "united-states-of-america-usa",
        "shopRating": null, "shopNumberOfReviews": 0,
        "status": 100, "gisStatus": 20,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "duration": 5, "pax": 1,
        "amountTotal": "1090.00", "currency": "USD",
        "hasPaymentMethod": true, "isActive": false,
        "thumbnails": {
          "GridSearchResultDesktop": "https://d2p1cf6997m1ir.cloudfront.net/media/thumbnails/…webp",
          "GridSearchResultMobilePort": "https://…webp", "DOSliderDesktop": "https://…webp"
        }
      }
    }
  ]
}
// captured verbatim from travel.padi.com — thumbnails is an object keyed by view size;
// status is numeric (captured 100) — code → label mapping to confirm
Trip date & range
vacation.dateFrom / dateTo
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=false' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "id": 20617,
        "uuid": "4f624186-ee7c-4f28-8f83-edab177111ce",
        "reference": "NSEAEQ",
        "shopId": 23397, "shopSlug": "rosen-plaza",
        "shopTitle": "Rosen Plaza",
        "shopLocationSlug": "united-states-of-america-usa",
        "shopRating": null, "shopNumberOfReviews": 0,
        "status": 100, "gisStatus": 20,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "duration": 5, "pax": 1,
        "amountTotal": "1090.00", "currency": "USD",
        "hasPaymentMethod": true, "isActive": false,
        "thumbnails": {
          "GridSearchResultDesktop": "https://d2p1cf6997m1ir.cloudfront.net/media/thumbnails/…webp",
          "GridSearchResultMobilePort": "https://…webp", "DOSliderDesktop": "https://…webp"
        }
      }
    }
  ]
}
// captured verbatim from travel.padi.com — thumbnails is an object keyed by view size;
// status is numeric (captured 100) — code → label mapping to confirm
Booking reference
vacation.reference
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=false' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "id": 20617,
        "uuid": "4f624186-ee7c-4f28-8f83-edab177111ce",
        "reference": "NSEAEQ",
        "shopId": 23397, "shopSlug": "rosen-plaza",
        "shopTitle": "Rosen Plaza",
        "shopLocationSlug": "united-states-of-america-usa",
        "shopRating": null, "shopNumberOfReviews": 0,
        "status": 100, "gisStatus": 20,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "duration": 5, "pax": 1,
        "amountTotal": "1090.00", "currency": "USD",
        "hasPaymentMethod": true, "isActive": false,
        "thumbnails": {
          "GridSearchResultDesktop": "https://d2p1cf6997m1ir.cloudfront.net/media/thumbnails/…webp",
          "GridSearchResultMobilePort": "https://…webp", "DOSliderDesktop": "https://…webp"
        }
      }
    }
  ]
}
// captured verbatim from travel.padi.com — thumbnails is an object keyed by view size;
// status is numeric (captured 100) — code → label mapping to confirm
View details link
vacation.uuid → deep-link
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=false' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "id": 20617,
        "uuid": "4f624186-ee7c-4f28-8f83-edab177111ce",
        "reference": "NSEAEQ",
        "shopId": 23397, "shopSlug": "rosen-plaza",
        "shopTitle": "Rosen Plaza",
        "shopLocationSlug": "united-states-of-america-usa",
        "shopRating": null, "shopNumberOfReviews": 0,
        "status": 100, "gisStatus": 20,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "duration": 5, "pax": 1,
        "amountTotal": "1090.00", "currency": "USD",
        "hasPaymentMethod": true, "isActive": false,
        "thumbnails": {
          "GridSearchResultDesktop": "https://d2p1cf6997m1ir.cloudfront.net/media/thumbnails/…webp",
          "GridSearchResultMobilePort": "https://…webp", "DOSliderDesktop": "https://…webp"
        }
      }
    }
  ]
}
// captured verbatim from travel.padi.com — thumbnails is an object keyed by view size;
// status is numeric (captured 100) — code → label mapping to confirm
2Past trip
FieldAPI → source
Trip name
bookings?is_past=truevacation.shopTitle
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=true' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "uuid": "4f624186-…", "reference": "NSEAEQ",
        "shopTitle": "Rosen Plaza", "shopLocationSlug": "united-states-of-america-usa",
        "status": 100,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "thumbnails": { "GridSearchResultDesktop": "https://…webp" }
      }
    }
  ]
}
// same shape as upcoming — is_past=true just flips the window;
// empty state: { "next": null, "prev": null, "results": [], "count": 0 }
Month & year
vacation.dateFrom
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=true' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "uuid": "4f624186-…", "reference": "NSEAEQ",
        "shopTitle": "Rosen Plaza", "shopLocationSlug": "united-states-of-america-usa",
        "status": 100,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "thumbnails": { "GridSearchResultDesktop": "https://…webp" }
      }
    }
  ]
}
// same shape as upcoming — is_past=true just flips the window;
// empty state: { "next": null, "prev": null, "results": [], "count": 0 }
Booking reference
vacation.reference
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=true' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "uuid": "4f624186-…", "reference": "NSEAEQ",
        "shopTitle": "Rosen Plaza", "shopLocationSlug": "united-states-of-america-usa",
        "status": 100,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "thumbnails": { "GridSearchResultDesktop": "https://…webp" }
      }
    }
  ]
}
// same shape as upcoming — is_past=true just flips the window;
// empty state: { "next": null, "prev": null, "results": [], "count": 0 }
View link
vacation.uuid → deep-link
cURL
curl 'https://travel.padi.com/api/v2/travel/account/bookings/?page=1&page_size=10&is_affiliate=false&is_past=true' \
  -H 'Authorization: Bearer <idToken>'
Response · shape
{
  "next": null, "prev": null, "count": 1,
  "results": [
    {
      "adventure": null,
      "vacation": {
        "uuid": "4f624186-…", "reference": "NSEAEQ",
        "shopTitle": "Rosen Plaza", "shopLocationSlug": "united-states-of-america-usa",
        "status": 100,
        "dateFrom": "2019-11-11T12:00:00Z", "dateTo": "2019-11-16T12:00:00Z",
        "thumbnails": { "GridSearchResultDesktop": "https://…webp" }
      }
    }
  ]
}
// same shape as upcoming — is_past=true just flips the window;
// empty state: { "next": null, "prev": null, "results": [], "count": 0 }