Go to developer

OAuth Verify / Exchange authorization code

Exchange authorization code

POST/oauth/token

Exchanges code + PKCE verifier for access_token. access_token is also verification_token for /verify/validate.

Authentication

BROWSER OK

Publishable client_id or secret BearerPublishable: client_id in body. Secret sk_*: Authorization Bearer clientId:clientSecret.

Request

Request body

Content-Type: application/json · required

  • client_idstring

    Required for publishable clients when not using secret Bearer auth

  • codestringrequired
  • code_verifierstringrequired
  • grant_typestringrequired

    Enum: authorization_code

  • redirect_uristringrequired

Response

200 Token issued

  • access_tokenstringrequired

    Also used as verification_token for POST /verify/validate

  • expires_inintegerrequired
  • token_typestringrequired

    Enum: Bearer

  • userobject
    • accessRolestringnullable
    • emailstringnullable
    • fullNamestringnullable
    • idinteger | stringrequired
    • isAdminbooleannullable
    • phonestringnullable
    • rolestringnullable

400 invalid_request or invalid_grant

  • errorstring
  • error_descriptionstring
  • validboolean

401 invalid_client

  • errorstring
  • error_descriptionstring
  • validboolean

Errors

ErrorHTTPMeaningFix
invalid_grant400Bad/used/expired code, redirect mismatch, or PKCE failureRestart OAuth; ensure redirect_uri and code_verifier match start Diagnose →
invalid_client401Unknown or mis-authenticated clientCheck client_id / secret Bearer format Diagnose →

SDK equivalent

Examples

Bash
curl -X POST "https://auth.keyra.ie/oauth/token" \
  -H "Content-Type: application/json" \
  -d '{"grant_type":"authorization_code","code":"auth_code_xxxxxxxx","client_id":"cp_test_xxxxxxxx","code_verifier":"dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk","redirect_uri":"http://localhost:3000/auth/keyra/callback"}'

Response

response.jsonJSON
{
  "access_token": "oat_xxxxxxxx",
  "token_type": "Bearer",
  "expires_in": 3600,
  "user": {
    "id": "usr_123",
    "phone": "+15551234567",
    "fullName": "Ada Lovelace",
    "email": "ada@example.com"
  }
}