Write the acceptance note before writing the adapter
Choose the job that consumes older dataengineering posts. Describe its required fields, how it displays missing text and whether it relies on a newest-first list. Record a decision for each requirement: supported directly, handled locally or outside the migration. This makes a successful HTTP call evidence about one read, rather than an accidental promise about the whole client. Reddit Proxy is an independent historical archive, not an official or live Reddit interface.
Capture a page with the new credential
Call GET https://api.redditproxy.com/v1/posts?subreddit=dataengineering&limit=3 using X-API-Key: <key> or Authorization: Bearer <key>. Both accept the redditproxy.com archive key; neither reuses Reddit OAuth. Store the credential on the server and omit it from captured diagnostic files. Save the response and request parameters so later mapping experiments can run against your own copy.
The list route is /v1/posts. A comment-list consumer would use /v1/comments, text search /v1/search and an individual known record /v1/item?id=.... Those are separate operations, not arbitrary Reddit URLs forwarded by the service. A record lookup does not fetch a complete conversation.
Map data without manufacturing missing context
Validate the data array and each field your consumer needs before conversion. Keep absent values separate from empty strings and record conversion failures separately from an empty successful page. The response is flat. Available parent_id and link_id values may support optional local grouping, but they are not query filters and do not establish a complete thread. Test the downstream report using the saved response before fetching more.
Translate filters by meaning
When adding q, remember that it matches title and text with AND between search terms within a matching field. It is not an arbitrary query language: a match is not established by splitting the required words between title and text. Dates from and to use YYYY-MM-DD in UTC, with the to day included. min_score is only a numeric filter. Results follow internal document order _doc, not chronological, relevance or score order; a local sort rearranges only records already received.
Replace the old pagination stopping rule
Allow at most 100 records per request and 100 separately requested pages per query. Read total together with relation: eq means an exact query total, gte a lower bound, unknown an unreliable total that may be null. Unknown is not zero. Reaching a page limit or splitting date ranges proves neither exhaustive collection nor unique records. Preserve the actual requested pages and any unresolved coverage questions in the migration note.
Test failure paths before switching the consumer
Handle HTTP 400 by correcting parameters, 401 by checking the key, 402 by checking balance and 429 by slowing requests. Successful retrievals, including empty pages, cost one credit. Invalid requests do not debit and upstream failures refund reservations. A lost client response can still follow charged server success; another successful attempt costs another credit. Replaying a saved response locally avoids that extra retrieval while testing conversion.
Finally, compare the produced report with the acceptance note. A passing local mapping test does not guarantee future coverage or immutable responses. Keep unsupported current-state or write operations outside this adapter. Public /v1/status supplies static scope and HTTP responsiveness, not upstream health. Use documentation for the route contract, pricing for costs and the key page for account administration.