Menu

Rep4Rep API

Automate Rep4Rep from your own scripts: your account, Steam profiles, tasks and requests. JSON in and out.

Authentication

Make an API key in Settings → API key and send it with every request, in the Authorization header:

curl https://api.rep4rep.com/v1/user \
  -H "Authorization: Bearer YOUR_API_KEY"

Or as ?key= in the URL (handy for a quick test; the header keeps it out of logs and browser history):

https://api.rep4rep.com/v1/user?key=YOUR_API_KEY

Anyone with your key can use your account and points. If it leaks, make a new one in the settings: the old one stops working right away.

Basics

  • Base URL: https://api.rep4rep.com/v1
  • Responses are JSON, the result in data. Send parameters as form fields or as a JSON body.
  • Steam profiles are addressed by their SteamID64 (steamId), dates are ISO 8601 in UTC.
  • 300 requests per minute per key. The X-RateLimit-Remaining header says how many are left; past it you get 429 until the minute is over.

Errors

Errors come with an HTTP status and a message; invalid parameters (422) also list them in errors.

401 Missing or invalid API key
404 Not found, e.g. a steamId that isn't one of your profiles
409 Conflict: the task isn't available anymore or the profile belongs to another account
422 Invalid parameters
429 Too many requests, wait a moment
{"message": "Invalid API key."}

Account

GET /user

The account the key belongs to, and a snapshot of it to plan your next calls. availablePoints is what your requests can still spend (points minus what's held for comments being checked); pendingPoints is what you'll get for your own comments that are still being checked. rateLimit is your key's limit and what's left this minute (this call included). comments counts the last 24 hours across your Steam profiles against their daily limit; nextSlotAt is when the next one frees up. tasksBeingChecked are your comments waiting for their check; weeklyStreak is this week's progress towards the streak reward.

curl https://api.rep4rep.com/v1/user \
  -H "Authorization: Bearer YOUR_API_KEY"
{
    "data": {
        "id": 1,
        "username": "you",
        "points": 1250,
        "availablePoints": 1180,
        "pendingPoints": 44,
        "createdAt": "2024-03-01T12:00:00+00:00",
        "rateLimit": {
            "perMinute": 300,
            "remaining": 299
        },
        "comments": {
            "last24h": 7,
            "dailyLimit": 20,
            "nextSlotAt": "2024-03-02T09:14:00+00:00"
        },
        "tasksBeingChecked": 2,
        "runningRequests": 1,
        "steamProfiles": 2,
        "weeklyStreak": {
            "weeks": 3,
            "daysThisWeek": 2,
            "daysNeeded": 4,
            "reward": 200,
            "claimed": false
        }
    }
}

Steam profiles

GET /steam-profiles

Your Steam profiles. Every other call addresses a profile by its steamId (SteamID64). commentsToday is how many comments were posted from it in the last 24 hours; Steam allows about 10 a day.

curl https://api.rep4rep.com/v1/steam-profiles \
  -H "Authorization: Bearer YOUR_API_KEY"
{
    "data": [
        {
            "steamId": "76561198000000001",
            "name": "you",
            "profileUrl": "https://steamcommunity.com/profiles/76561198000000001",
            "avatar": "https://avatars.steamstatic.com/…_full.jpg",
            "level": 42,
            "visibility": "public",
            "commentPermission": "public",
            "hasVacBan": false,
            "canReceiveComments": true,
            "problem": null,
            "verified": false,
            "commentsToday": 3,
            "dailyCommentLimit": 10,
            "addedAt": "2024-03-01T12:00:00+00:00"
        }
    ]
}

GET /steam-profiles/{steamId}

One of your Steam profiles.

curl https://api.rep4rep.com/v1/steam-profiles/76561198000000001 \
  -H "Authorization: Bearer YOUR_API_KEY"

POST /steam-profiles

Add a Steam profile. A profile that's linked to another account can only be added on the website, by signing in through Steam (409).

profile
Required. A SteamID64, SteamID, or profile URL (also custom URLs).
curl -X POST https://api.rep4rep.com/v1/steam-profiles \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d "profile=76561198000000001"

Returns 201 with the profile.

DELETE /steam-profiles/{steamId}

Remove a Steam profile. Its running requests end; comments already posted from it are still checked and paid.

curl -X DELETE https://api.rep4rep.com/v1/steam-profiles/76561198000000001 \
  -H "Authorization: Bearer YOUR_API_KEY"

Returns 204, no body.

Tasks

GET /steam-profiles/{steamId}/tasks

Tasks to do from this profile, best paying first: post comment.text on the target's profile (target.commentsUrl), then submit it with POST /tasks. A list can come back empty when there's nothing right now.

limit
Optional. How many, 1 to 25 (default 10).
curl https://api.rep4rep.com/v1/steam-profiles/76561198000000001/tasks \
  -H "Authorization: Bearer YOUR_API_KEY"
{
    "data": [
        {
            "requestId": "01HV8Z4M3K2Q7N1P5R9S6T0W2X",
            "target": {
                "steamId": "76561198000000002",
                "name": "someone",
                "commentsUrl": "https://steamcommunity.com/profiles/76561198000000002/allcomments"
            },
            "comment": {
                "id": 4455,
                "text": "+rep great teammate"
            },
            "points": 16,
            "ticket": "eyJpdiI6…"
        }
    ]
}

POST /tasks

Submit a comment you posted. It's checked on Steam about 5 minutes later; you get the points once it's found. With the task's ticket it's accepted up to 60 minutes after you got the task, at the points shown, even if the request was paused, deleted or filled up meanwhile. 409 when the task isn't available anymore and there's no valid ticket, or this profile commented on the target in the last day: get a new one.

steamId
Required. Your profile the comment was posted from.
requestId
Required. From the task.
commentId
Required. From the task (comment.id).
ticket
Recommended. From the task.
curl -X POST https://api.rep4rep.com/v1/tasks \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d "steamId=76561198000000001&requestId=01HV8Z4M3K2Q7N1P5R9S6T0W2X&commentId=4455&ticket=eyJpdiI6…"

Returns 201 with the task.

GET /tasks

Comments you submitted, newest first, with their verification status: pending, retrying (not found yet, checked again), verified or failed. Paginated (data, links, meta).

status
Optional. pending, retrying, verified or failed.
steamId
Optional. Only the ones posted from this profile.
perPage
Optional. 1 to 100 (default 50).
page
Optional. Page number.
curl https://api.rep4rep.com/v1/tasks \
  -H "Authorization: Bearer YOUR_API_KEY"
{
    "data": [
        {
            "id": 123456,
            "requestId": "01HV8Z4M3K2Q7N1P5R9S6T0W2X",
            "steamId": "76561198000000001",
            "targetSteamId": "76561198000000002",
            "comment": "+rep great teammate",
            "status": "verified",
            "result": "Comment found",
            "points": 22,
            "bonusPoints": 0,
            "nextCheckAt": null,
            "submittedAt": "2024-03-01T12:00:00+00:00",
            "resolvedAt": "2024-03-01T12:05:10+00:00"
        }
    ],
    "links": [
        "…"
    ],
    "meta": [
        "…"
    ]
}

GET /tasks/{id}

One of your submitted comments.

curl https://api.rep4rep.com/v1/tasks/123456 \
  -H "Authorization: Bearer YOUR_API_KEY"

Requests

GET /requests

Your requests for comments on your own profiles (Receive Comments), newest first. costPerComment null means Auto (follows the market). problem says why a running request isn't getting comments. Paginated.

status
Optional. active, paused or completed.
curl https://api.rep4rep.com/v1/requests \
  -H "Authorization: Bearer YOUR_API_KEY"
{
    "data": [
        {
            "id": "01HV8Z4M3K2Q7N1P5R9S6T0W2X",
            "steamId": "76561198000000001",
            "status": "active",
            "costPerComment": null,
            "commentLimit": 500,
            "commentsReceived": 120,
            "commentList": {
                "id": 8,
                "name": "My comments"
            },
            "problem": null,
            "lastCommentAt": "2024-03-01T12:05:10+00:00",
            "createdAt": "2024-02-20T09:00:00+00:00"
        }
    ],
    "links": [
        "…"
    ],
    "meta": [
        "…"
    ]
}