Help center
Developers

REST API

Read and add praise, and ask customers for praise, from your own code.

Base URL: https://kikopraise.com/api/v1

Authentication

Create a key under Developers, API keys. Send it on every request:

Authorization: Bearer cp_live_...
  • The key is shown once. Only a fingerprint is stored.
  • Read only keys can call GET endpoints. Read and write keys can also POST and PATCH.
  • A key belongs to one workspace and cannot see another.
  • Revoking a key stops it on its next request.

Limits and errors

120 requests per minute per key. Over that you get 429 with a Retry-After header. Errors are JSON, { "error": "What went wrong" }, with a matching status: 400, 401, 403, 404, 429 or 500.

Ask a customer for praise

POST /requests is the one to call when a customer is happy: a ticket closes with a 5-star rating, an order is delivered, a deal is won.

curl https://kikopraise.com/api/v1/requests \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{
    "email": "alex@company.com",
    "name": "Alex Kim",
    "source": "Zendesk",
    "reference": "ticket-4192",
    "message": "Thanks for your patience on ticket 4192!"
  }'
FieldNotes
emailRequired for one person. Or send recipients with up to 25 entries of email and name.
nameOptional, used in the greeting.
formIdOptional. Defaults to your first active form.
messageOptional personal note, up to 600 characters.
sourceOptional label shown on the Requests page. Default API.
referenceOptional id from your system. Sending the same source and reference again returns the original request and sends nothing, so retries are safe.
sendfalse creates a tracked link without emailing.

Each result is one of sent, link_created, skipped_recent, skipped_responded, invalid, daily_limit or failed, and includes the customer's tracked link.

GET /requests?status=SENT|OPENED|SUBMITTED&limit=25 lists your requests, newest first.

Praise

EndpointWhat it does
GET /testimonialsList. Filters: status, type, tag, minRating, search, limit (max 50), cursor
POST /testimonialsAdd a text testimonial. authorName and content are required
GET /testimonials/IDOne testimonial
PATCH /testimonials/IDEdit fields, or send { "status": "APPROVED" } on its own

New testimonials are PENDING unless you say otherwise. Creating the same author and text twice returns the first one with "duplicate": true.

When nextCursor is not null, pass it as cursor for the next page.

Other reads

GET /tags, GET /forms (with share links), GET /widgets, and GET /me (counts by status, average rating, top tags).

Not in v1

Deleting testimonials, creating forms or widgets, uploading files, and video testimonials.

On this page