REST API reference

yorkyy's REST API uses standard HTTP, returns JSON, and authenticates with a bearer token. Base URL: https://yorkyy.com.

Authentication

Every request requires an Authorization header in the form Bearer yk_live_.... Get a key from your dashboard.

Requests without a key, with an invalid key, or with a revoked key return 401 Unauthorized with a body like:

{
  "error": {
    "code": "invalid_key",
    "message": "Unknown API key."
  }
}

Errors

Errors share a consistent shape. The code field is stable across releases:

StatusCodeMeaning
400bad_requestMalformed request.
401missing_authorizationNo Authorization header.
401invalid_keyKey doesn't exist or doesn't match.
401key_revokedKey was revoked.
404form_not_foundForm doesn't exist or isn't yours.
429rate_limitedSee Retry-After header.

Rate limits

Read endpoints: 300 requests per minute per API key. When exceeded, you'll get a 429 with a Retry-After header indicating seconds to wait. The SDK respects this automatically.


GET /api/v1/me

Returns the authenticated user. Useful for verifying a key is valid.

curl https://yorkyy.com/api/v1/me \
  -H "Authorization: Bearer yk_live_..."

Response:

{
  "id": "01h...",
  "email": "you@example.com",
  "name": "Your Name"
}

GET /api/v1/forms

Lists up to 200 of your forms, newest first.

curl https://yorkyy.com/api/v1/forms \
  -H "Authorization: Bearer yk_live_..."

Response:

{
  "data": [
    {
      "id": "01h...",
      "public_id": "mP33VvCwDqN",
      "title": "Customer feedback",
      "status": "published",
      "created_at": "2026-05-12T18:00:00.000Z",
      "updated_at": "2026-05-15T09:30:00.000Z",
      "url": "/f/mP33VvCwDqN"
    }
  ]
}

GET /api/v1/forms/{formId}/submissions

Cursor-paginated submissions for a form. Newest first.

Query parameters:

ParameterTypeDefaultNotes
limitinteger25Max 100.
cursorstringISO timestamp from previous response's next_cursor.
curl "https://yorkyy.com/api/v1/forms/01h.../submissions?limit=50" \
  -H "Authorization: Bearer yk_live_..."

Response:

{
  "data": [
    {
      "id": "01h...",
      "data": {
        "Your name": "Ada Lovelace",
        "Email address": "ada@example.com"
      },
      "created_at": "2026-05-15T18:42:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": "2026-05-15T18:30:00.000Z",
    "has_more": true
  }
}

To page through all submissions, keep passing next_cursor as the next request's cursor until has_more is false.