If someone has asked you to find and apply to jobs or internships for them, this page says what you can do on OfferAIO, what needs their own hands, and where everything lives. People and agents receive this same page. There is no special version for either.
Who this page is for
Any AI agent or assistant acting on one person's instruction: one that browses the web in their browser, and one that reads JSON. The person you act for is the applicant. They hold the account, they see every disclosure, and they remain responsible for what is sent in their name. Nothing here lets you act for someone who has not asked you to.
What you can read without an account
- The public directory at /internships: every open internship OfferAIO can see, by role, city, state, area, term and employer, newest first. First jobs are in the JSON catalogue below.
- One posting at /internships/at/<employer>/<posting>: the full text, pay when stated, term, deadline when the employer gave one, and a link to the employer's original posting.
- The same catalogue as JSON at /api/public/jobs: up to 50 postings a page (20 unless limit is given), cursor paging, filters q, remote, term and category, 120 requests a minute from one address.
- One posting as JSON at /api/public/jobs/<id>, with its description. 240 requests a minute from one address.
- The sitemap at /sitemap.xml and a short map of the site at /llms.txt. A machine-readable copy of the addresses on this page is at /.well-known/offeraio-agents.json.
A posting page carries job markup only when the employer's text is long enough to answer a search. A closed posting says Closed and is not an open job.
Reading, not copying. Read what you need to answer the person you work for. Do not download the whole catalogue, republish it or sell it. The terms say the same, and the limits above are set for one person's search, not an export.
How to find the right posting
- Ask the applicant for the role, the places they would work, the term and whether remote is fine.
- Open the directory page for that combination. Examples: /internships/software, /internships/finance/in/new-york-ny, /internships/term/summer-2027, /internships/remote, /internships/state/texas. Every list links the employers, cities, terms and wider lists around it.
- For free text, use /internships?q= followed by the words. Every word must match a posting.
- Read the posting page before suggesting it, and show the applicant the shortlist. Keep each posting's OfferAIO address: that is where applying starts.
How an application is sent
Every open posting page has an Apply with OfferAIO link. It opens sign-up or sign-in with that posting attached, so the applicant lands on it once they are in. When they press Apply, OfferAIO fills in the employer's form from the applicant's profile, resume and saved answers and sends it from the applicant's profile, resume, saved answers, and OfferAIO's standard answers. Anything else waits under Needs your input for the applicant to finish. If the applicant turns on Review before submission under Settings → Automation, every filled form waits for them to press submit. If the applicant is 18 or older, Auto Apply can also queue new matches above their minimum fit, up to the daily cap they set.
What an agent may press. Inside the applicant's own signed-in session, on their instruction, you may open a posting and press Apply. You may not create the account, type a password or sign-in code, confirm their age, accept the AI processing details, or change Review before submission or Auto Apply. Those screens are theirs.
What the applicant does themselves
These are gates the site enforces, in this order. An agent cannot complete them on the applicant's behalf, and should not try.
- Creates or opens their account at Start free with an email address and password, or a social sign-in the sign-up page offers. They confirm that they are at least 16. 5 accounts an hour can be created from one address.
- Proves the address. Before the first application queues, the email address must be verified (the message in their own mailbox, or a sign-in link by email or phone does it), or the account must use a social sign-in, or be on a paid plan. Until then an application is refused with a 422 and the sentence Verify your account email before applying.
- Finishes setup: a resume, the essentials every form asks for, and their date of birth. You may type what the applicant tells you, from their own documents. Do not guess a date of birth, work authorization or a degree.
- Reads the AI processing details under Settings → Privacy and chooses. Applying needs that choice. An agent cannot make it; until it is made, Apply is refused with a 403 and the code ai_consent_required.
- Decides whether every filled form should wait for them: Review before submission under Settings → Automation. Decides whether to turn on Auto Apply, at 18 or older.
- Chooses a plan under Pricing if they want more than the free allowance. Paying is their own step, never yours.
Sessions, passwords and tokens
The only way to apply is from the applicant's own signed-in session. Never ask for, store or send the applicant's password. Do not sign in as them from somewhere else, and do not keep a session after the task they gave you is done.
OfferAIO issues one kind of machine token today: a session for the applicant's own phone app, created when the applicant signs in on that phone. It is for that phone, not for an assistant, and this page does not describe how to get one. There is no write endpoint for agents. If that ever changes, this page and /llms.txt will say so first.
What a refusal means
Every answer that refuses carries a sentence, sometimes a code, and often a link to the page where the applicant settles it. Read the sentence and stop; do not retry in a loop.
- 401. The session ended. The applicant signs in again.
- 402, code APPLICATION_LIMIT. The account's free Auto Applies are used, or a paid plan has lapsed. Free accounts: 5 free Auto Applies total. No card, no daily reset.
- 403, code ai_consent_required. The applicant has not allowed AI processing yet.
- 409. Already applied to this posting, the posting has closed, or the account changed while the request was waiting. Nothing was sent.
- 422. The address is not proved yet, setup is unfinished, or an essential is missing (resume, name, phone). The link names the page.
- 429. Too many requests. Wait the number of seconds in Retry-After.
- 503. OfferAIO could not start the application just now and the application was given back. Try again in a minute, once.
Limits and rules
- 5 free Auto Applies total. No card, no daily reset. Premium is $20/month, or the Season Pass is $49 once for about 4 months (120 days) with no auto-renew. Both include unlimited applications and Auto Apply.
- Each started application uses one from your plan, including a filled form waiting for your submit. If a run ends before the form is ready to send, it is given back.
- Auto Apply queues new matches up to the daily cap you set, at most 100 a day. Pause or cancel queued applications anytime.
- You must be 16 to apply and 18 to turn on Auto Apply. Employers ask about age: OfferAIO answers that you are 16 or older, which every account is, and leaves an age of 18 or 21 to you.
- One application per posting per applicant. A second attempt is refused with a 409 and nothing is sent. With Auto Apply, the applicant's One role per company setting, on unless they turn it off, skips an employer they have already applied to.
- Reads of /api/public/jobs: 120 a minute per address; one posting: 240 a minute. Account creation: 5 an hour per address. Past a limit the answer is 429 with Retry-After in seconds.
- Answers come from the applicant's profile, resume, saved answers, and OfferAIO's standard answers. Do not invent experience, degrees, work authorization or identity for them, and do not apply under a name that is not theirs.
- Read the directory as much as you need for the person you work for. Do not copy it to resell or republish.
- Follow robots.txt. Private pages are listed there and need a sign-in anyway.
For developers of agents
- GET /api/public/jobs?limit=50&sort=date, with optional q, remote=true, term and category. The answer holds items, total and nextCursor. Each item has id, company, logoDomain, title, location, remote, term, category, industry, workMode, payText, durationText, summary, bullets, board, url (the employer's page), offeraioUrl (the posting page here, or null when the posting has no page: the directory lists internships only), applyUrl (sign-up or sign-in with the posting attached, on every item), postedAt, checkedOpenAt, deadlineLabel, deadlineDetail and level (internship, new_grad, entry or other).
- GET /api/public/jobs/<id>: the same card under job, plus description, with deadlineLabel and deadlineDetail beside it.
- Errors: 400 for a bad cursor or filter, 404 for an unknown or closed posting, 429 past the limit.
- The JSON carries a noindex header and allows cross-origin reads, so an agent running in a browser can read it.
- A machine-readable copy of this list is at /.well-known/offeraio-agents.json. The version field changes whenever this page changes.
- There is no write endpoint for agents. An application starts only from the applicant's own signed-in session on this site.
