No notifications
Dashboard
Overview of your exam program
Slot Management
Track purchased, used, and remaining exam slots
| Exam | Type | Purchased | Used | Remaining | Status | Expires |
|---|---|---|---|---|---|---|
| Loading slots… | ||||||
Members
Manage exam participants and scheduling windows
Add New Members
| Status | Actions | ||
|---|---|---|---|
| Loading members… | |||
Exam Schedules
Create and track group exam schedules pending CertReady approval
| Exam Code | Type | Start Time | Duration | Members | Status | Exam Set | Created | Actions |
|---|---|---|---|---|---|---|---|---|
| Loading schedules… | ||||||||
Results
View completed exam scores and download certificates
| Exam | Score | Passed | Date | Certificate | |
|---|---|---|---|---|---|
| Loading results… | |||||
TOEIC Results
Scaled scores (10–990) and CEFR levels for completed TOEIC Listening & Reading tests.
| Listening | Reading | Total | CEFR | Date | Certificate | |
|---|---|---|---|---|---|---|
| Loading TOEIC results… | ||||||
Branding
Upload your company logo — it will appear on certificates issued to your members
Company Logo
PNG recommended, 200×80 px with transparent background — displayed on member certificates.
Colors & Font
Certificate Preview
Admin Team
Manage who has access to this partner portal
- Loading admins…
Support
Get help from our team — we respond within your SLA window
How can we help?
Choose a category to open a ticket — we'll respond within your SLA window.
Exam Blocking Issue
A member cannot complete their exam due to a platform issue.
Billing or Account Issue
Slot purchases, invoices, or account access problems.
General Question
Feature questions, onboarding guidance, documentation requests.
Your Tickets
No tickets yet
Submit a support request and we'll get back to you within your SLA window.
| ID | Subject | Priority | Status | Created | Last Updated |
|---|
New Support Ticket
Integration
Embed CertReady data on your own website using the Partner API
API Key
Read-only programmatic access to partner data
The full key is shown only once when first generated. After that, only the prefix is visible.
Outbound Webhooks
Receive real-time events at your HTTPS endpoints
Each delivery includes an X-Webhook-Signature: sha256=… header for verification.
New Webhook Endpoint
Loading webhooks…
Quick Start
All API calls pass your API key in the Authorization header. The base URL is https://api.awsready.net.
curl -H "Authorization: ApiKey sk_live_YOUR_API_KEY" \ https://api.awsready.net/partner/members/alice@example.com/certificates
Authentication
There are two authentication methods available:
| Method | When to use | Header format |
|---|---|---|
| API Key | Server-side, automated calls from your website backend | Authorization: ApiKey sk_live_… |
| Bearer Token | Interactive use in the partner portal (managed automatically) | Authorization: Bearer <token> |
Show a Member's Certificates
Fetch all active certificates for a member, including a 24-hour presigned download link:
curl -H "Authorization: ApiKey sk_live_YOUR_API_KEY" \
"https://api.awsready.net/partner/members/alice%40example.com/certificates"
# Response
{
"certificates": [
{
"examCode": "CLF-C02",
"examName": "AWS Cloud Practitioner",
"issuedAt": "2026-03-01T10:00:00Z",
"expiresAt": "2028-03-01T10:00:00Z",
"verificationCode": "AWSR-2026-A7X9-CLF02",
"downloadUrl": "https://…s3-presigned-url…" // valid 24 hours
}
]
}
Embed a Verification Badge
Link to our public verification page — no API key required, embeds in any website:
<!-- Replace AWSR-2026-A7X9-CLF02 with the member's verificationCode --> <iframe src="https://cert-ready.net/pages/verify?code=AWSR-2026-A7X9-CLF02" width="440" height="360" style="border:none;border-radius:8px" title="CertReady Certificate Verification"> </iframe>
Or link directly to the verification page:
https://cert-ready.net/pages/verify?code=AWSR-2026-A7X9-CLF02
List All Member Results
Retrieve paginated exam results for all members under your partner account:
curl -H "Authorization: ApiKey sk_live_YOUR_API_KEY" \
"https://api.awsready.net/partner/results"
# Response
{
"Items": [
{
"email": "alice@example.com",
"examCode": "CLF-C02",
"score": 85,
"passed": true,
"completedAt": "2026-03-01T10:00:00Z"
}
],
"nextToken": "…" // pass as ?nextToken=… for next page
}
Portal SSO — Launch Exams from Your Company Portal
Let your employees start a CertReady exam directly from your internal portal — no separate login required. Your backend generates a short-lived token; the employee's browser follows the launch link and is authenticated automatically.
Prerequisites
- SSO is enabled when your partner record has at least one entry in
ssoAllowedDomains(e.g.["yourcompany.com"]). Contact support to set this up. - Each SSO launch consumes one slot from your active slot batch for the requested exam & slot type (
testby default). Top up if you run out. - Tokens are single-use and expire after 5 minutes — generate on demand, never ahead of time.
Step 1 — Generate a token from your server
Call POST /sso/token with the employee's email and the exam code. The response contains a launchUrl the employee's browser must follow within 5 minutes.
curl -s -X POST \
-H "Authorization: ApiKey sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"alice@yourcompany.com","examCode":"SAA-C03","name":"Alice Smith","slotType":"test"}' \
https://sso.example.cert-ready.net/sso/token
# Response (200 OK)
{
"ssoToken": "w3K8… (raw token — treat as secret)",
"expiresIn": 300,
"launchUrl": "https://cert-ready.net/pages/sso.html?token=w3K8…&exam=SAA-C03"
}
# Failures
# 401 — invalid or inactive API key
# 402 — no active slot batch for this exam / slotType
# 403 — email domain not in ssoAllowedDomains, or target user is blocked
# 400 — unknown examCode, invalid email format
import os, requests
API_KEY = os.environ["CERTREADY_API_KEY"]
BASE_URL = "https://sso.example.cert-ready.net"
def get_exam_launch_url(email: str, exam_code: str, name: str = "", slot_type: str = "test") -> str:
resp = requests.post(
f"{BASE_URL}/sso/token",
headers={"Authorization": f"ApiKey {API_KEY}"},
json={"email": email, "examCode": exam_code, "name": name, "slotType": slot_type},
timeout=10,
)
resp.raise_for_status()
return resp.json()["launchUrl"]
# In your view/handler:
launch_url = get_exam_launch_url("alice@yourcompany.com", "SAA-C03", "Alice Smith")
# Redirect the user's browser to launch_url
const BASE_URL = 'https://sso.example.cert-ready.net';
async function getExamLaunchUrl(email, examCode, name = '', slotType = 'test') {
const res = await fetch(`${BASE_URL}/sso/token`, {
method: 'POST',
headers: {
'Authorization': `ApiKey ${process.env.CERTREADY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ email, examCode, name, slotType }),
});
if (!res.ok) {
const err = await res.json().catch(() => ({}));
throw new Error(err.error || `SSO token request failed (${res.status})`);
}
const { launchUrl } = await res.json();
return launchUrl;
}
// In your Express route:
app.get('/start-exam', async (req, res) => {
const launchUrl = await getExamLaunchUrl(req.user.email, 'SAA-C03', req.user.name);
res.redirect(launchUrl);
});
Step 2 — Redirect the employee
Redirect or open the launchUrl in the employee's browser. The token is single-use and expires in 5 minutes — generate it on-demand, not ahead of time.
Test SSO with your account
Generate a live token for your own email to verify the integration is working. This consumes one slot from your active batch.
Endpoint Reference
All endpoints below require an Authorization: ApiKey sk_live_… header unless noted.
| Method | Endpoint | Description |
|---|---|---|
| GET | /partner/dashboard |
Overview stats |
| GET | /partner/members |
List all members |
| GET | /partner/members/{email}/certificates |
Certificates for one member |
| GET | /partner/results |
All member results (paginated) |
| GET | /partner/results/{email} |
Results for one member |
| GET | /partner/slots |
Slot inventory |
| GET | /verify/{verificationCode} |
Public verification — no API key needed |
| POST | /sso/token (on dedicated SSO host) |
Generate a 5-min SSO launch token for an employee |
Live Progress
Track member exam sessions in real time — questions answered, skipped, and time remaining
Loading progress data…
Teams
Organize members into teams. Use the team filter in Members, Results, and Progress tabs to view a specific team.
No teams yet
Create your first team to start organizing members into groups.
| Team | Members | Created | Actions |
|---|---|---|---|
| Loading... | |||