{"name":"Gift N Thrift","domain":"giftnthrift.com","origin":"https://giftnthrift.com","purpose":"Gift N Thrift is free classifieds for donated goods. Assist a user to donate_item_for_user or claim_item_for_user. Items are always $0. Pickup is $0/$0. SHIP is all-in auto-calculated shipping + $2.99 fee. Not a selling classifieds board.","agent_ui_policy":"api_only","human_ui":"/dashboard… humans only. /dashboard/seller/listings/new is the human donate form — not an agent path.","photo_upload":{"per_photo_bytes":12582912,"per_photo_mb":12,"per_request_bytes":20971520,"per_request_mb":20,"max_photos":12,"server_resize":"max edge 1600px JPEG quality 82 after the body is received","note":"App limits: 12MB per photo, 20MB per request, max 12 photos. Oversized bodies return HTTP 413 naming these limits. Server resizes to 1600px JPEG for storage. Netlify Functions also cap the raw HTTP body near 6MB (~4.5MB binary) — if 413 fires below the app limit, compress first."},"one_liner":"Free classifieds for donated goods — give it away or claim it ($0 item).","item_price_cents":0,"item_price_usd":"$0","fee_cents":299,"fee_usd":"$2.99","shipping_model":"all_in_auto_calculated_plus_platform_fee_on_ship_only","fulfillment_enum":["SHIP","PICKUP","BOTH"],"claim_fulfillment_enum":["SHIP","PICKUP"],"fee_rules":{"item_price_cents":0,"pickup":{"shipping_cents":0,"platform_fee_cents":0,"total_cents":0,"note":"Local pickup claims are truly free: $0 shipping and $0 service fee."},"ship":{"shipping":"all-in auto-calculated from packed size and ZIP codes","platform_fee_cents":299,"platform_fee_usd":"$2.99","formula":"all-in shipping + $2.99 service fee","consumer_lines":["Item $0","Shipping (all-in)","Service fee $2.99"],"note":"Shipping is all-in. Claimer never types a postage dollar amount. Present Item $0, Shipping, Service fee only."},"vehicles":"Vehicles require pickup. They cannot be shipped.","pickup_always_available":true},"shipping_inputs":["packed weight","packed L×W×H inches","origin ZIP","destination ZIP"],"shipping_quote":{"method":"POST","path":"/api/shipping/quote","json_body":{"listingId":"preferred — loads packed size and origin ZIP from the listing","toZip":"5-digit destination ZIP","fulfillment":"SHIP | PICKUP — PICKUP returns zeros"},"response_fields":["shippingCents","platformFeeCents","totalCents","fulfillment","carrier","service","detail"],"note":"Never invent cents. Pickup is 0/0. SHIP total = shippingCents + platformFeeCents. Present Item $0, Shipping (all-in), Service fee only."},"ai_suggest":{"method":"POST","path":"/api/listings/ai-suggest","auth":"Same Bearer as batch listings: POST /api/mobile/login or minted gnt_live_. Env: AGENT_API_TOKEN + AGENT_API_USER_EMAIL. Cookie session is the human web app.","body":"multipart field photos (up to 4) or JSON { images: [{ mime, base64 }] }","response_fields":["title","category","condition","description","estimatedFmv","disclaimer","source"],"note":"Draft only. Donor must edit and publish. FMV is an estimate — not tax advice. Uses OpenAI vision when OPENAI_API_KEY is set; otherwise a labeled demo mock."},"batch_listings":{"method":"POST","path":"/api/agent/listings","auth":"POST /api/mobile/login → Authorization: Bearer, or minted gnt_live_… (humans mint in Office → Donate / listings), or env AGENT_API_TOKEN bound to AGENT_API_USER_EMAIL. Cookie session is for the human web app, not the agent path.","content_type":"multipart/form-data","fields":{"presets":"JSON object — shared category, Who/size, fulfillment, origin ZIP/city/state, default dims/weight, optional estimatedFmv","photos":"Repeat the photos field, one image per listing (v1). photo0…photo11 also accepted. Max 12.","items":"Optional JSON array aligned with photos: { title, description, estimatedFmv } plus rare category/size overrides"},"response":{"listings":[{"id":"cuid","slug":"navy-peacoat-5t-ab12c","url":"https://giftnthrift.com/listings/{slug}"}],"errors":[{"index":0,"error":"string","fieldErrors":{}}],"jobId":null},"note":"Creates ACTIVE listings for the authenticated donor and marks isSeller. Agents: this is the sole donate publish path (API only). v1 is one photo per listing. 12MB/photo, 20MB/request; server resizes to 1600px JPEG; HTTP 413 names the limit. Splitting one image into N listings, and async jobs/webhooks (jobId), are follow-ups — jobId is always null for now. Never returns passwords or the raw token."},"agent_token":{"mint":"Office → Donate / listings. Minting rotates: the previous hash is replaced immediately. Copy the plaintext once; only a prefix is stored for display.","header":"Authorization: Bearer gnt_live_…","env_fallback":"AGENT_API_TOKEN + AGENT_API_USER_EMAIL (operator/dev). Do not put passwords in API responses."},"mobile_shop":{"method":"GET","path":"/api/mobile/shop","auth":"Optional. No Authorization returns every ACTIVE listing with public fields only (no donor email, street, or name). Authorization: Bearer from POST /api/mobile/login keeps that shape and omits the caller’s own listings.","response_fields":["listings[].id","listings[].slug","listings[].url","listings[].fulfillment","listings[].condition","listings[].city","listings[].state","listings[].imageUrl","listings[].images"],"note":"Native Shop and Browse. Not an agent donate path. POST /api/shipping/quote stays a public price quote (all-in shippingCents + platformFeeCents) and does not require a Bearer."},"mobile_register":{"method":"POST","path":"/api/mobile/register","auth":"None. Creates the same user as /signup, then returns a Bearer like POST /api/mobile/login.","json_body":{"name":"string","email":"string","password":"string","zip":"optional","intent":"seller | buyer | both"},"note":"Native Expo sign-up. Not an agent donate path. Does not return the password."},"session_bridge":{"mint":"POST /api/mobile/session-bridge","redeem":"GET /api/mobile/session-bridge?code=","auth":"Mint requires Authorization: Bearer from POST /api/mobile/login. Redeem is a one-time 90s ticket that sets the Auth.js session cookie, then 303s to an allowlisted next path.","json_body":{"next":"/browse | /checkout/{slug} | /dashboard | /dashboard?tab=donate | /dashboard?tab=claims | /listings/{slug}"},"response_fields":["url","expiresAt","next"],"note":"Expo Shop Claim, signed-in Browse, and Office. Do not put the Bearer in a URL. Ticket is hashed at rest, single-use, 90 second TTL. Not a third auth system. Do not call /api/auth/mobile-bridge — that is the NextAuth catch-all and returns 400."},"who_pays":"Items are always $0. Local pickup is truly free — $0 shipping and $0 fee. If the claimer chooses SHIP, they pay all-in auto-calculated shipping plus a $2.99 Gift N Thrift service fee. Donors list for free. Vehicles require pickup.","checkout":"SHIP checkout has two paid lines: all-in auto-calculated shipping, then a $2.99 Gift N Thrift service fee. PICKUP checkout is $0 shipping and $0 fee. The donated good stays $0.","shipping":"SHIP postage is an all-in auto-calculated quote from the listing’s packed weight and dimensions, the donor’s ship-from ZIP, and the claimer’s destination ZIP. Claimers never type a postage dollar amount. PICKUP skips the carrier entirely.","pickup":"Pickup is always an option. Pickup claims are truly free: $0 shipping and $0 service fee. Vehicles require pickup and cannot be shipped.","operator":"SOTF Express Publishing, LLC","parent_line":"Gift N Thrift is operated by SOTF Express Publishing, LLC (Saints of the Future / SOTF). SHIP payments are charged by SOTF Express Publishing, LLC. There is no separate Gift N Thrift merchant account. Pickup claims are $0 and do not open a card charge.","tax_disclaimer":"Gift N Thrift receipts are records of the transfer for the donor’s files — not tax advice, not IRS Form 8283, and not a promise that the gift is deductible. U.S. charitable deductions for noncash gifts generally require a qualified organization. Talk to a tax professional.","donor_points":"Donors earn 1 bonus point per $1 of confirmed FMV when a listing is successfully claimed. Points are not a tax deduction and cannot be redeemed yet.","intent_router":{"donate_item_for_user":{"intent":"donate_item_for_user","when":"The user wants to give something away, donate an item, list free classifieds, or says “hey Grok donate this” (or Muse / ChatGPT / Claude).","match_phrases":["hey grok donate this","donate this","donate these","donate my","give this away","give it away","give away this","list this as free","list this as free classifieds","help me donate"],"first_action":"Collect photos, POST /api/mobile/login (Bearer) or use a minted gnt_live_ token, then POST /api/agent/listings. Do not open /dashboard/seller/listings/new.","default_fulfillment":"BOTH (PICKUP for vehicles). Pickup is FREE: $0 shipping and $0 fee. Never quote $2.99 for pickup. Offer SHIP only if they want the item to travel (all-in shipping + $2.99)."},"claim_item_for_user":{"intent":"claim_item_for_user","when":"The user wants to find, claim, or pick up free stuff — furniture, clothes, cars, coats.","match_phrases":["find free","claim that","claim this","i need free","any free cars","free kids coat","pick it up","help me get that donated"],"first_action":"Use documented APIs and stable URLs (/browse, /c/{slug}) — not clicking around the human UI as the primary path. Prefer PICKUP.","default_fulfillment":"PICKUP ($0 shipping, $0 fee) unless they give a destination ZIP for SHIP (all-in shipping + $2.99)."}},"intents":[{"intent":"donate_item_for_user","summary":"Help a person give away an item on Gift N Thrift via API only. Auth → photos → optional AI draft → POST /api/agent/listings → return listing URLs. Never drive the human donate form.","utterances":["Hey Grok donate this","Hey Grok, donate this","Hey Grok, help me donate this item to someone who needs it","Hey Grok, give this away","Grok list this as free classifieds","Hey Muse, donate these shoes","ChatGPT, help me donate this coat","Claude, give away this dining table","List this boys coat size 5T as free classifieds","I want to give away this dining table","Donate my old car — someone can pick it up"],"steps":[{"title":"Collect photos","detail":"Ask the user for photos they already have (or take with their camera). Do not open /dashboard/seller/listings/new. One photo per listing for v1, max 12 per POST."},{"title":"Authenticate the donor (API)","detail":"POST /api/mobile/login with { email, password } and keep Authorization: Bearer. Or use a minted gnt_live_ token from Office → Donate / listings (humans mint; agents only send the Bearer). Never put passwords in later responses."},{"title":"Optional AI draft","detail":"POST /api/listings/ai-suggest with the same Bearer and photos. Prefill title, category, condition, description, estimatedFmv. Confirm with the donor — never auto-invent a tax deduction. FMV is an estimate, not tax advice."},{"title":"Choose fulfillment in presets","detail":"Set fulfillment=PICKUP, SHIP, or BOTH on the presets JSON. Pickup is always an option and is $0/$0 for the claimer. Vehicles must be PICKUP. If they want it to travel, offer SHIP (all-in shipping + $2.99) and still leave pickup on via BOTH."},{"title":"Fill origin + packed size in presets","detail":"shipFromCity, shipFromState, shipFromZip required. weightLb, lengthIn, widthIn, heightIn required unless pickup-only. Clothing/shoes: apparelSex + apparelSize."},{"title":"Publish via API only","detail":"POST /api/agent/listings (multipart presets JSON + one photo per listing, optional items[] overrides). Item price is always $0. Do not submit /dashboard/seller/listings/new. Response listings[].url is the public URL."},{"title":"Tell the user the listing URL","detail":"Return https://giftnthrift.com/listings/{slug} (or the origin from /api/agent/overview). Do not invent a deduction."}]},{"intent":"claim_item_for_user","summary":"Help a person claim a $0 donated item. Search → open listing → choose PICKUP ($0/$0) or SHIP (all-in shipping + $2.99) → checkout → return the order URL.","utterances":["Hey Grok find me free furniture","Hey Grok, I need a free kids coat 5T","Find free kids coat size 5T near me","Claim that free table — I can pick it up","I need free clothes shipped to 78704","Any free cars I can pick up?","Help me get that donated mixer"],"steps":[{"title":"Find a listing","detail":"Open /browse, /categories, or a category such as /c/clothing-boys. Query params: q, category, condition, zip. Example searches: “kids coat 5T”, “free furniture”, “shoes”."},{"title":"Choose SHIP or PICKUP","detail":"On /listings/{slug}, pickup is always an option and is $0 / $0. Vehicles require pickup. For SHIP, fill toZip (Deliver to ZIP) and wait for the auto-calculated carrier quote. Do not invent a rate."},{"title":"See the true total","detail":"SHIP totals: item $0, all-in shipping, service fee $2.99. PICKUP totals: item $0, shipping $0, fee $0."},{"title":"Sign in","detail":"Use /login with callbackUrl=/checkout/{slug} (optional portal=buyer hint opens Claims / orders). Or create an account at /signup."},{"title":"Complete checkout","detail":"Open /checkout/{slug}. Set fulfillment=PICKUP or SHIP. Fill shipToName, shipToLine1, shipToCity, shipToState, shipToZip. PICKUP records the claim at $0 with no card charge. SHIP charges all-in shipping + $2.99. The item stays $0."},{"title":"Track the order","detail":"Confirmation is /orders/{id}/success (SHIP) or /orders/{id} (PICKUP). Follow /dashboard?tab=claims (Claims / orders tab in the one office) for tracking after the donor ships, or coordinate pickup from the origin ZIP. /dashboard/buyer redirects here."}]}],"office":{"login":"https://giftnthrift.com/login","desk":"https://giftnthrift.com/dashboard","donate":"https://giftnthrift.com/dashboard?tab=donate","claims":"https://giftnthrift.com/dashboard?tab=claims","new_listing":"https://giftnthrift.com/dashboard/seller/listings/new","note":"Humans only. One authenticated office. /dashboard/seller/listings/new is the human donate form — agents must POST /api/agent/listings. /dashboard/seller → ?tab=donate, /dashboard/buyer → ?tab=claims."},"portals":{"buyer":{"login":"https://giftnthrift.com/login?portal=buyer","desk":"https://giftnthrift.com/dashboard?tab=claims","checkout":"https://giftnthrift.com/checkout/{slug}","note":"Alias — Claims / orders tab. Not a separate office."},"seller":{"login":"https://giftnthrift.com/login?portal=seller","desk":"https://giftnthrift.com/dashboard?tab=donate","new_listing":"https://giftnthrift.com/dashboard/seller/listings/new","note":"Alias — Donate / listings tab for humans. Not a separate office. Agents do not drive new_listing."}},"urls":{"home":"https://giftnthrift.com/","browse":"https://giftnthrift.com/browse","categories":"https://giftnthrift.com/categories","free_classifieds":"https://giftnthrift.com/free-classifieds","category_pattern":"https://giftnthrift.com/c/{slug}","category_slugs":["vehicles","clothing","clothing-boys","clothing-girls","clothing-men","clothing-women","shoes","furniture","electronics","kids","kitchen","home","misc"],"listing_pattern":"https://giftnthrift.com/listings/{slug}","checkout_pattern":"https://giftnthrift.com/checkout/{slug}","office":"https://giftnthrift.com/dashboard","office_donate":"https://giftnthrift.com/dashboard?tab=donate","office_claims":"https://giftnthrift.com/dashboard?tab=claims","new_listing":"https://giftnthrift.com/dashboard/seller/listings/new","how_it_works":"https://giftnthrift.com/how-it-works","for_agents":"https://giftnthrift.com/for-agents","agents_md":"https://giftnthrift.com/agents.md","llms_txt":"https://giftnthrift.com/llms.txt","ai_txt":"https://giftnthrift.com/ai.txt","overview":"https://giftnthrift.com/api/agent/overview","church_portal":"https://giftnthrift.com/church","church_video":"https://giftnthrift.com/church/video","church_members":"https://giftnthrift.com/church/members","pastor_share_pattern":"https://giftnthrift.com/v/{code}","organization_signup":"https://giftnthrift.com/signup/organization","unsubscribe":"https://giftnthrift.com/unsubscribe","church_members_api":"https://giftnthrift.com/api/church/members","church_announcements_api":"https://giftnthrift.com/api/church/announcements","batch_listings":"https://giftnthrift.com/api/agent/listings","ai_suggest":"https://giftnthrift.com/api/listings/ai-suggest","sitemap":"https://giftnthrift.com/sitemap.xml"},"browse_query":{"q":"Free-text search (e.g. kids coat 5T, oak table, shoes)","category":"One of: vehicles, clothing, clothing-boys, clothing-girls, clothing-men, clothing-women, shoes, furniture, electronics, kids, kitchen, home, misc","condition":"One of: new, like_new, good, fair","zip":"5-digit US ZIP — used to preview auto-calculated shipping on cards (SHIP only)"},"form_fields":{"listing_create":[{"name":"title","required":true,"note":"Short item name"},{"name":"category","required":true,"note":"vehicles | clothing | clothing-boys | clothing-girls | clothing-men | clothing-women | shoes | furniture | electronics | kids | kitchen | home | misc"},{"name":"condition","required":true,"note":"new | like_new | good | fair"},{"name":"description","required":true,"note":"Honest condition notes"},{"name":"estimatedFmv","required":true,"note":"Donor’s used-value estimate in USD. Not a charge. After a successful claim, the donor earns 1 bonus point per $1 FMV. Not a tax deduction."},{"name":"photos","required":false,"note":"Up to 8 images for the human web form (client-compressed). Agents: one photo per listing on POST /api/agent/listings (max 12). App limit 12MB per photo / 20MB per request; server resizes to 1600px JPEG. HTTP 413 names those limits."},{"name":"fulfillment","required":true,"note":"SHIP | PICKUP | BOTH. SHIP = ship only (no pickup). PICKUP = free local. BOTH = either. Vehicles force PICKUP. Default BOTH."},{"name":"apparelSex","required":false,"note":"boys | girls | men | women | unisex — required for clothing and shoes"},{"name":"apparelSize","required":false,"note":"Size as worn (2T, 5T, L, 10). Required for clothing and shoes."},{"name":"shipFromCity","required":true,"note":"Origin city (pickup meetup city, or ship-from)"},{"name":"shipFromState","required":true,"note":"2-letter US state"},{"name":"shipFromZip","required":true,"note":"5-digit origin ZIP for postage or pickup area"},{"name":"weightLb","required":false,"note":"Packed weight in pounds — required when offering SHIP"},{"name":"lengthIn","required":false,"note":"Packed length inches — required when offering SHIP"},{"name":"widthIn","required":false,"note":"Packed width inches — required when offering SHIP"},{"name":"heightIn","required":false,"note":"Packed height inches — required when offering SHIP"}],"listing_zip_preview":[{"name":"toZip","required":true,"note":"Deliver-to ZIP on /listings/{slug} (SHIP)"}],"checkout":[{"name":"listingId","required":true,"note":"Hidden; already on the checkout page"},{"name":"fulfillment","required":true,"note":"SHIP or PICKUP. PICKUP is $0 shipping and $0 fee. Vehicles and pickup-only listings must use PICKUP."},{"name":"shipToName","required":true,"note":"Recipient / claimer name"},{"name":"shipToLine1","required":true,"note":"Street address (SHIP) or meetup note (PICKUP, e.g. Local pickup)"},{"name":"shipToCity","required":true,"note":"City"},{"name":"shipToState","required":true,"note":"2-letter US state"},{"name":"shipToZip","required":true,"note":"5-digit destination ZIP — recalculates SHIP postage. Do not type a dollar amount."},{"name":"saveAddress","required":false,"note":"Checkbox to store the address in the office (Claims / orders)"}],"batch_listings_presets":[{"name":"category","required":false,"note":"Locked for the pile when set. AI fills it only if omitted."},{"name":"condition","required":false,"note":"Default good if omitted; AI may fill per photo."},{"name":"fulfillment","required":false,"note":"BOTH | SHIP | PICKUP. Shared for the pile. Default BOTH. Vehicles force PICKUP."},{"name":"apparelSex","required":false,"note":"boys | girls | men | women | unisex — required for clothing/shoes piles."},{"name":"apparelSize","required":false,"note":"Size as worn (2T, 5T, L, 10). Required for clothing/shoes piles."},{"name":"shipFromCity","required":true,"note":"Origin city for the whole pile."},{"name":"shipFromState","required":true,"note":"2-letter US state."},{"name":"shipFromZip","required":true,"note":"5-digit origin ZIP."},{"name":"shipFromName","required":false,"note":"Optional ship-from name for postage labels."},{"name":"shipFromLine1","required":false,"note":"Optional ship-from street for postage labels."},{"name":"weightLb","required":false,"note":"Default packed weight in pounds — required when the pile offers SHIP."},{"name":"lengthIn","required":false,"note":"Default packed length inches."},{"name":"widthIn","required":false,"note":"Default packed width inches."},{"name":"heightIn","required":false,"note":"Default packed height inches."},{"name":"estimatedFmv","required":false,"note":"Optional default used-value USD for the pile. Per-item items[].estimatedFmv wins. AI fills if both omitted."},{"name":"referralCode","required":false,"note":"Church/org referral code (aliases: ref, churchCode). Attributes the listing and reserves $1 from paid ship claims. Also honored from /r/{code} cookie or the donor's signup-attributed church."}],"batch_listings_items":[{"name":"title","required":false,"note":"Per listing. AI drafts from that listing’s photo if omitted."},{"name":"description","required":false,"note":"Per listing. AI drafts if omitted."},{"name":"estimatedFmv","required":false,"note":"Per listing USD. Falls back to presets.estimatedFmv, then AI."},{"name":"category","required":false,"note":"Rare override. Prefer locking category on presets."},{"name":"condition","required":false,"note":"Per listing condition slug."},{"name":"apparelSex","required":false,"note":"Rare override of the pile Who lock."},{"name":"apparelSize","required":false,"note":"Rare override of the pile size lock."}],"login":[{"name":"email","required":true,"note":"Account email"},{"name":"password","required":true,"note":"Account password — never a published demo secret"}]},"playbooks":{"donate_item_for_user":{"intent":"donate_item_for_user","summary":"Help a person give away an item on Gift N Thrift via API only. Auth → photos → optional AI draft → POST /api/agent/listings → return listing URLs. Never drive the human donate form.","utterances":["Hey Grok donate this","Hey Grok, donate this","Hey Grok, help me donate this item to someone who needs it","Hey Grok, give this away","Grok list this as free classifieds","Hey Muse, donate these shoes","ChatGPT, help me donate this coat","Claude, give away this dining table","List this boys coat size 5T as free classifieds","I want to give away this dining table","Donate my old car — someone can pick it up"],"steps":[{"title":"Collect photos","detail":"Ask the user for photos they already have (or take with their camera). Do not open /dashboard/seller/listings/new. One photo per listing for v1, max 12 per POST."},{"title":"Authenticate the donor (API)","detail":"POST /api/mobile/login with { email, password } and keep Authorization: Bearer. Or use a minted gnt_live_ token from Office → Donate / listings (humans mint; agents only send the Bearer). Never put passwords in later responses."},{"title":"Optional AI draft","detail":"POST /api/listings/ai-suggest with the same Bearer and photos. Prefill title, category, condition, description, estimatedFmv. Confirm with the donor — never auto-invent a tax deduction. FMV is an estimate, not tax advice."},{"title":"Choose fulfillment in presets","detail":"Set fulfillment=PICKUP, SHIP, or BOTH on the presets JSON. Pickup is always an option and is $0/$0 for the claimer. Vehicles must be PICKUP. If they want it to travel, offer SHIP (all-in shipping + $2.99) and still leave pickup on via BOTH."},{"title":"Fill origin + packed size in presets","detail":"shipFromCity, shipFromState, shipFromZip required. weightLb, lengthIn, widthIn, heightIn required unless pickup-only. Clothing/shoes: apparelSex + apparelSize."},{"title":"Publish via API only","detail":"POST /api/agent/listings (multipart presets JSON + one photo per listing, optional items[] overrides). Item price is always $0. Do not submit /dashboard/seller/listings/new. Response listings[].url is the public URL."},{"title":"Tell the user the listing URL","detail":"Return https://giftnthrift.com/listings/{slug} (or the origin from /api/agent/overview). Do not invent a deduction."}]},"claim_item_for_user":{"intent":"claim_item_for_user","summary":"Help a person claim a $0 donated item. Search → open listing → choose PICKUP ($0/$0) or SHIP (all-in shipping + $2.99) → checkout → return the order URL.","utterances":["Hey Grok find me free furniture","Hey Grok, I need a free kids coat 5T","Find free kids coat size 5T near me","Claim that free table — I can pick it up","I need free clothes shipped to 78704","Any free cars I can pick up?","Help me get that donated mixer"],"steps":[{"title":"Find a listing","detail":"Open /browse, /categories, or a category such as /c/clothing-boys. Query params: q, category, condition, zip. Example searches: “kids coat 5T”, “free furniture”, “shoes”."},{"title":"Choose SHIP or PICKUP","detail":"On /listings/{slug}, pickup is always an option and is $0 / $0. Vehicles require pickup. For SHIP, fill toZip (Deliver to ZIP) and wait for the auto-calculated carrier quote. Do not invent a rate."},{"title":"See the true total","detail":"SHIP totals: item $0, all-in shipping, service fee $2.99. PICKUP totals: item $0, shipping $0, fee $0."},{"title":"Sign in","detail":"Use /login with callbackUrl=/checkout/{slug} (optional portal=buyer hint opens Claims / orders). Or create an account at /signup."},{"title":"Complete checkout","detail":"Open /checkout/{slug}. Set fulfillment=PICKUP or SHIP. Fill shipToName, shipToLine1, shipToCity, shipToState, shipToZip. PICKUP records the claim at $0 with no card charge. SHIP charges all-in shipping + $2.99. The item stays $0."},{"title":"Track the order","detail":"Confirmation is /orders/{id}/success (SHIP) or /orders/{id} (PICKUP). Follow /dashboard?tab=claims (Claims / orders tab in the one office) for tracking after the donor ships, or coordinate pickup from the origin ZIP. /dashboard/buyer redirects here."}]},"claim":[{"title":"Find a listing","detail":"Open /browse, /categories, or a category such as /c/clothing-boys. Query params: q, category, condition, zip. Example searches: “kids coat 5T”, “free furniture”, “shoes”."},{"title":"Choose SHIP or PICKUP","detail":"On /listings/{slug}, pickup is always an option and is $0 / $0. Vehicles require pickup. For SHIP, fill toZip (Deliver to ZIP) and wait for the auto-calculated carrier quote. Do not invent a rate."},{"title":"See the true total","detail":"SHIP totals: item $0, all-in shipping, service fee $2.99. PICKUP totals: item $0, shipping $0, fee $0."},{"title":"Sign in","detail":"Use /login with callbackUrl=/checkout/{slug} (optional portal=buyer hint opens Claims / orders). Or create an account at /signup."},{"title":"Complete checkout","detail":"Open /checkout/{slug}. Set fulfillment=PICKUP or SHIP. Fill shipToName, shipToLine1, shipToCity, shipToState, shipToZip. PICKUP records the claim at $0 with no card charge. SHIP charges all-in shipping + $2.99. The item stays $0."},{"title":"Track the order","detail":"Confirmation is /orders/{id}/success (SHIP) or /orders/{id} (PICKUP). Follow /dashboard?tab=claims (Claims / orders tab in the one office) for tracking after the donor ships, or coordinate pickup from the origin ZIP. /dashboard/buyer redirects here."}],"donate":[{"title":"Open your office","detail":"Sign in at /login (optional portal=seller hint opens Donate / listings), then go to /dashboard/seller/listings/new. One office — not a separate seller app."},{"title":"Add photos, then AI-draft","detail":"Snap photos from the phone (Take photo / Upload from library — web PWA, or the Expo app). After the first photo, POST /api/listings/ai-suggest to draft title, category, condition, description, and an optional FMV hint. Donor edits every field. Never auto-publish."},{"title":"Choose SHIP or PICKUP","detail":"Field name=fulfillment. PICKUP is always allowed and stays $0/$0 for the claimer. Vehicles (vehicles) force PICKUP. Offering SHIP still leaves pickup available. Fill shipFromCity, shipFromState, shipFromZip. Packed weightLb / lengthIn / widthIn / heightIn are required when SHIP is offered."},{"title":"Publish at $0","detail":"There is no item price field. Donors list for free. Gift N Thrift does not pay donors. After Publish, the public listing URL is /listings/{slug}. List another keeps category, who/size, fulfillment, origin, and packed size. This web form is for humans only."},{"title":"Hand off when claimed, then download the receipt","detail":"On SHIP, pack the item after the claimer pays carrier + buffer + fee, mark shipped with tracking on /dashboard?tab=donate (Donate / listings). On PICKUP, arrange a meetup at the origin ZIP — no money changes hands. Download the donation PDF either way. /dashboard/seller redirects here. Gift N Thrift receipts are records of the transfer for the donor’s files — not tax advice, not IRS Form 8283, and not a promise that the gift is deductible. U.S. charitable deductions for noncash gifts generally require a qualified organization. Talk to a tax professional."}]},"canonical_facts":{"Item price":"$0 on every listing and every order","What it is":"Free classifieds for donated goods — give it away or claim it ($0 item).","Pickup":"$0 shipping and $0 service fee. Always available. Vehicles require pickup.","Ship":"All-in auto-calculated shipping + $2.99 service fee","Who pays":"On SHIP, the claimer. On PICKUP, nobody. Donors never collect money for the goods.","Shipping":"Auto-calculated from packed size and ZIP codes when the claim is SHIP","Service fee":"$2.99 on SHIP claims only; $0 on pickup","Donor listing fee":"Free — donors are not charged to list","Donor payout":"$0 — Gift N Thrift does not pay donors","Office":"One /dashboard for donate + claims. /dashboard/seller and /dashboard/buyer redirect into the matching tab.","Donor bonus points":"1 point per $1 of donor-entered FMV when the item is claimed. Not a tax deduction. Redemption later.","Parent company":"SOTF Express Publishing, LLC","Also known as":"Saints of the Future / SOTF","Tax":"Receipts are documentation, not a deductibility opinion","Contact":"contact@giftnthrift.com","Every transaction":"$1 from every completed SHIP claim that collects the $2.99 service fee goes to a church or charity, taken from that fee. Pickup is $0 and does not fund a dollar. The item stays $0. This is Gift N Thrift’s pledge, not the donor’s tax write-off.","Church referral":"Optional code. That claim’s $1 goes to the referring organization’s charity, reserved when the listing is published and funded when the ship fee is collected. It does not expire. Paid claims with no code still fund $1 to the Gift N Thrift charity pool."},"do_not_invent":["Do not invent a shipping dollar amount. Quote it: enter a ZIP (toZip / shipToZip) or POST /api/shipping/quote with listingId + toZip + fulfillment.","Do not tell users a SHIP claim is free to their door. SHIP is all-in shipping + $2.99.","Do not add a third money line. Consumers see Item $0, Shipping (all-in), and Service fee $2.99 only.","Do not tell users pickup costs $2.99. Pickup is $0 shipping and $0 fee.","Do not ship a vehicle. Vehicles require pickup.","Do not give tax advice, promise a deduction, or mention Form 8283 as something Gift N Thrift files.","Do not say Gift N Thrift is a 501(c)(3) or a qualified charity.","Do not pay or quote a payout to donors. Donors receive $0 for the goods.","Do not scrape random URLs when a stable pattern exists: /browse, /categories, /c/{slug}, /listings/{slug}, /checkout/{slug}, POST /api/agent/listings, POST /api/mobile/login, POST /api/listings/ai-suggest.","Do not drive the human donate form at /dashboard/seller/listings/new. Agents: API only. Web UI is for humans.","Do not send users to two separate back offices. There is one /dashboard (Donate / listings | Claims / orders). /dashboard/seller and /dashboard/buyer redirect into it.","Do not publish or reuse local demo passwords in production. Demo logins are local-dev only.","Do not treat an AI FMV hint as an appraisal, a deduction, or tax advice. The donor must confirm estimatedFmv.","Do not present donor bonus points as a tax deduction or a payout. Points are 1 per $1 FMV after a successful claim; redemption is not live.","Do not tell donors that a church code makes the $1 their IRS deduction. Gift N Thrift owes that dollar from the ship service fee. Every completed claim that collects the $2.99 fee funds $1: a church code chooses the recipient, otherwise it is the Gift N Thrift charity pool. Pickup is $0 and does not fund a dollar. Do not raise the $2.99 fee."],"demo_accounts":{"local_dev_only":true,"note":"Seeded seller/buyer logins exist only in a local database. Do not print, guess, or reuse demo passwords on production. See the project README on a local checkout."}}